我需要在python中使用HTTP PUT上传一些数据到服务器。从我对urllib2文档的简要阅读来看,它只执行HTTP POST。有没有办法在python中做一个HTTP PUT ?
当前回答
使用urllib3
为此,您需要在URL中手动编码查询参数。
>>> import urllib3
>>> http = urllib3.PoolManager()
>>> from urllib.parse import urlencode
>>> encoded_args = urlencode({"name":"Zion","salary":"1123","age":"23"})
>>> url = 'http://dummy.restapiexample.com/api/v1/update/15410' + encoded_args
>>> r = http.request('PUT', url)
>>> import json
>>> json.loads(r.data.decode('utf-8'))
{'status': 'success', 'data': [], 'message': 'Successfully! Record has been updated.'}
使用请求
>>> import requests
>>> r = requests.put('https://httpbin.org/put', data = {'key':'value'})
>>> r.status_code
200
其他回答
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模块。它应该允许您发出任何类型的HTTP请求。
不久前,我也需要解决这个问题,这样我才能充当RESTful API的客户端。我选择了httplib2,因为除了GET和POST之外,它还允许我发送PUT和DELETE。Httplib2不是标准库的一部分,但是您可以很容易地从奶酪商店获得它。
当然,您可以在任何级别上使用现有的标准库,从套接字到调整urllib。
http://pycurl.sourceforge.net/
PyCurl是libcurl的Python接口。
libcurl是一个免费且易于使用的客户端URL传输库,…支持……HTTP PUT”
“PycURL的主要缺点是它相对于libcurl来说是一个相对较薄的层,没有任何漂亮的python类层次结构。这意味着它有一个陡峭的学习曲线,除非你已经熟悉libcurl的C API。”
你看过put.py吗?我以前用过。你也可以用urllib修改你自己的请求。
推荐文章
- 如何检查一个对象是否是python中的生成器对象?
- 如何从Python包内读取(静态)文件?
- 我需要HTTP GET请求的内容类型报头吗?
- 如何计算一个逻辑sigmoid函数在Python?
- python: SyntaxError: EOL扫描字符串文字
- Pipenv:命令未找到
- 根据Pandas中的另一列提取列值
- virtualenv和pyenv是什么关系?
- 如何正确地设置和拆除带有测试的pytest类?
- 为什么我得到“Pickle - EOFError: run out of input”读取一个空文件?
- 替换pandas数据框架中的列值
- random.seed():它做什么?
- 如何使用PyCharm中安装的包?
- 我如何得到一个Flask请求的url的不同部分?
- 弗拉斯克什么时候应该。G被使用?