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