Answers:
过去,我使用过各种python HTTP库,而我最喜欢的是“ Requests ”。现有的库具有相当有用的接口,但是对于简单的操作,代码最终可能会花几行时间。请求中的基本PUT如下所示:
payload = {'username': 'bob', 'email': 'bob@bob.com'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)
然后,您可以使用以下方法检查响应状态代码:
r.status_code
或回应:
r.content
请求有很多语法和快捷方式,可以使您的生活更轻松。
json=payload
如果您希望数据在正文中,请使用参数。
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)
requests
库。
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
您可以使用请求库,与采用urllib2方法相比,它可以简化很多事情。首先从pip安装它:
pip install requests
有关安装请求的更多信息。
然后设置放置请求:
import requests
import json
url = 'https://api.github.com/some/endpoint'
payload = {'some': 'data'}
# Create your header as required
headers = {"content-type": "application/json", "Authorization": "<auth-key>" }
r = requests.put(url, data=json.dumps(payload), headers=headers)
请参阅请求库快速入门。我认为这比urllib2简单得多,但确实需要安装和导入此附加软件包。
您看过put.py吗?我过去曾经用过。您也可以使用urllib修改自己的请求。
当然,您可以使用现有的标准库在任何级别(从套接字到调整urllib)进行滚动。
http://pycurl.sourceforge.net/
“ PyCurl是libcurl的Python接口。”
“ libcurl是一个免费且易于使用的客户端URL传输库,...支持... HTTP PUT”
“ PycURL的主要缺点是它是libcurl上相对较薄的一层,没有任何不错的Pythonic类层次结构。这意味着除非您已经熟悉libcurl的C API,否则它的学习曲线就比较陡峭。”
如果要保留在标准库中,则可以子类化urllib2.Request
:
import urllib2
class RequestWithMethod(urllib2.Request):
def __init__(self, *args, **kwargs):
self._method = kwargs.pop('method', None)
urllib2.Request.__init__(self, *args, **kwargs)
def get_method(self):
return self._method if self._method else super(RequestWithMethod, self).get_method()
def put_request(url, data):
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = RequestWithMethod(url, method='PUT', data=data)
return opener.open(request)
一个更合适的方法requests
是:
import requests
payload = {'username': 'bob', 'email': 'bob@bob.com'}
try:
response = requests.put(url="http://somedomain.org/endpoint", data=payload)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(e)
raise
如果HTTP PUT请求中存在错误,则会引发异常。