我需要在python中使用HTTP PUT上传一些数据到服务器。从我对urllib2文档的简要阅读来看,它只执行HTTP POST。有没有办法在python中做一个HTTP PUT ?


当前回答

不久前,我也需要解决这个问题,这样我才能充当RESTful API的客户端。我选择了httplib2,因为除了GET和POST之外,它还允许我发送PUT和DELETE。Httplib2不是标准库的一部分,但是您可以很容易地从奶酪商店获得它。

其他回答

你看过put.py吗?我以前用过。你也可以用urllib修改你自己的请求。

我还推荐Joe Gregario编写的httplib2。我经常使用这个而不是标准库中的httplib。

一个更合适的处理请求的方法是:

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请求中出现错误,将引发异常。

您可以使用请求库,与采用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简单得多,但确实需要安装和导入这个额外的包。

你可以使用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)