我需要PUT
在python中使用HTTP将一些数据上传到服务器.从我对urllib2文档的简要介绍来看,它只能用于HTTP POST
.有没有办法PUT
在python中做HTTP ?
我过去曾经使用过各种python HTTP库,我已经把' 请求 '作为我的最爱.现有的libs具有相当可用的接口,但是对于简单的操作,代码最终可能只有几行.请求中的基本PUT如下所示:
payload = {'username': 'bob', 'email': 'bob@bob.com'} >>> r = requests.put("http://somedomain.org/endpoint", data=payload)
然后,您可以检查响应状态代码:
r.status_code
或响应:
r.content
请求有很多synactic糖和快捷方式,这将使你的生活更轻松.
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)
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
你应该看一下httplib模块.它应该让你做出你想要的任何类型的HTTP请求.
我需要在一段时间内解决这个问题,以便我可以充当RESTful API的客户端.我决定使用httplib2,因为它允许我除了GET和POST之外还发送PUT和DELETE.Httplib2不是标准库的一部分,但您可以从奶酪店轻松获得它.
您可以使用请求库,与采用urllib2方法相比,它简化了很多事情.首先从pip安装它:
pip install requests
更多关于安装请求.
然后设置put请求:
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": "" } r = requests.put(url, data=json.dumps(payload), headers=headers)
请参阅请求库的快速入门.我认为这比urllib2简单得多,但是需要安装和导入这个额外的包.
这在python3中做得更好,并在stdlib文档中记录
该urllib.request.Request
班获得了method=...
在python3参数.
一些示例用法:
req = urllib.request.Request('https://example.com/', data=b'DATA!', method='PUT') urllib.request.urlopen(req)
我还推荐Joe Gregario的httplib2.我在标准库中定期使用它而不是httplib.