我需要在python中使用HTTP PUT上传一些数据到服务器。从我对urllib2文档的简要阅读来看,它只执行HTTP POST。有没有办法在python中做一个HTTP PUT ?
当前回答
您可以使用请求库,与采用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": "<auth-key>" }
r = requests.put(url, data=json.dumps(payload), headers=headers)
请参阅请求库的快速入门。我认为这比urllib2简单得多,但确实需要安装和导入这个额外的包。
其他回答
在过去,我使用过各种python HTTP库,我最喜欢的是请求。现有的库具有非常有用的接口,但是对于简单的操作来说,代码可能会太长。请求中的基本PUT如下所示:
payload = {'username': 'bob', 'email': 'bob@bob.com'}
>>> r = requests.put("http://somedomain.org/endpoint", data=payload)
然后,您可以使用以下命令检查响应状态代码:
r.status_code
或者这样回答:
r.content
请求有很多语法糖和快捷方式,会让你的生活更容易。
如果希望留在标准库中,可以继承urllib2。要求:
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)
您应该看看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)
当然,您可以在任何级别上使用现有的标准库,从套接字到调整urllib。
http://pycurl.sourceforge.net/
PyCurl是libcurl的Python接口。
libcurl是一个免费且易于使用的客户端URL传输库,…支持……HTTP PUT”
“PycURL的主要缺点是它相对于libcurl来说是一个相对较薄的层,没有任何漂亮的python类层次结构。这意味着它有一个陡峭的学习曲线,除非你已经熟悉libcurl的C API。”
推荐文章
- 有没有办法在python中做HTTP PUT
- “foo Is None”和“foo == None”之间有什么区别吗?
- 类没有对象成员
- Django模型“没有显式声明app_label”
- 熊猫能自动从CSV文件中读取日期吗?
- 在python中zip的逆函数是什么?
- 有效的方法应用多个过滤器的熊猫数据框架或系列
- 如何检索插入id后插入行在SQLite使用Python?
- 我如何在Django中添加一个CharField占位符?
- 如何在Python中获取当前执行文件的路径?
- 我如何得到“id”后插入到MySQL数据库与Python?
- super()失败,错误:TypeError "参数1必须是类型,而不是classobj"当父不继承对象
- Python内存泄漏
- 我能在服务器端应用程序(PHP、Ruby、Python等)上读取URL的哈希部分吗?
- 实现嵌套字典的最佳方法是什么?