有什么办法可以在python中执行HTTP PUT
时间:2020-03-06 14:30:52 来源:igfitidea点击:
我需要使用python中的HTTPPUT
将一些数据上传到服务器。根据我对urllib2文档的简短阅读,它仅执行HTTPPOST
。有什么办法可以在python中做HTTPPUT
吗?
解决方案
我们看过put.py吗?我过去曾经用过。我们也可以使用urllib修改自己的请求。
当然,我们可以使用现有的标准库在任何级别(从套接字到调整urllib)进行滚动。
http://pycurl.sourceforge.net/
" PyCurl是libcurl的Python接口。"
" libcurl是一个免费且易于使用的客户端URL传输库,...支持... HTTP PUT"
" PycURL的主要缺点是它是libcurl上的一个相对较薄的层,没有任何不错的Pythonic类层次结构。这意味着除非我们已经熟悉libcurl的C API,否则它的学习曲线就比较陡峭。"
我们应该看看httplib模块。它应该让我们发出所需的任何HTTP请求。
import urllib2 opener = urllib2.build_opener(urllib2.HTTPHandler) request = urllib2.Request('http://example.org', data='your_put_data') request.add_header('Content-Type', 'your/contenttype') request.get_method = lambda: 'PUT' url = opener.open(request)
我有一段时间需要解决此问题,以便可以充当RESTful API的客户端。我选择了httplib2,因为它允许我除了GET和POST之外还发送PUT和DELETE。 Httplib2不是标准库的一部分,但是我们可以从奶酪店轻松获得它。
我还推荐Joe Gregario提供的httplib2. 我经常使用它,而不是标准库中的httplib。
Httplib似乎是一个更清洁的选择。
import httplib connection = httplib.HTTPConnection('1.2.3.4:1234') body_content = 'BODY CONTENT GOES HERE' connection.request('PUT', '/url/path/to/put/to', body_content) result = connection.getresponse() # Now result.status and result.reason contains interesting stuff