有什么办法可以在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

