有没有办法在Python中进行HTTP PUT请求?

230

我需要使用Python中的HTTP PUT方法将一些数据上传到服务器。从我简短阅读urllib2文档的了解,它只支持HTTP POST

是否有办法在Python中执行HTTP PUT操作?

14个回答

2
当然,您可以使用现有的标准库自己编写代码,从底层套接字到调整urllib。

http://pycurl.sourceforge.net/

"PyCurl是libcurl的Python接口。"
"libcurl是一个免费且易于使用的客户端URL传输库,支持HTTP PUT等功能。"
"PycURL的主要缺点是它只是libcurl的相对薄弱层,没有那些漂亮的Python类层次结构。这意味着它有一个相当陡峭的学习曲线,除非您已经熟悉libcurl的C API。"

我相信这会起作用,但我想要更符合Python风格的东西。 - Amandasaurus

1
你可以使用 requests.request
import requests

url = "https://www.example/com/some/url/"
payload="{\"param1\": 1, \"param1\": 2}"
headers = {
  'Authorization': '....',
  'Content-Type': 'application/json'
}

response = requests.request("PUT", url, headers=headers, data=payload)

print(response.text)

0

使用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请求中有错误,则会引发异常。


0

使用 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.'}

使用requests

>>> import requests
>>> r = requests.put('https://httpbin.org/put', data = {'key':'value'})
>>> r.status_code
200

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接