Python连接到HTTP服务器

时间:2016-10-14 05:30:33

标签: python http dropbox

在我的计划中,我正在尝试访问https://api.dropbox.com/1/oauth2/token。为了做到这一点,我试图使用http.client.HTTPSConnection()。但是,我从服务器收到400语句,即使我通过浏览器发送相同的请求,我得到了实际的回复:

{"error": "Call requires one of the following methods: POST, OPTIONS. Got GET."}

我相信这会发生在子域名中,因为我也测试了https://docs.python.org/3/的函数,结果非常相似。

这是我的代码(Python3):

conn = http.client.HTTPSConnection('docs.python.org')
conn.request('get', '/3/')
response = conn.getresponse().read()
print(response)

我应该如何使用http.client库发送正确的请求?

1 个答案:

答案 0 :(得分:2)

TL; DR:将小写'get'更改为大写'GET'应解决问题。

原因:根据第5.1.1节,RFC2616

  

Method标记表示要对其执行的方法   Request-URI标识的资源。该方法区分大小写。

RFC2616还定义了8种方法,分别是“OPTIONS”,“GET”,“HEAD”,“POST”,“PUT”,“DELETE”,“TRACE”和“CONNECT”。所有这些都是大写的。

我们知道一些HTTP客户端(如python-requestsjQuery.ajax)也支持小写方法,但它们不是RFC为使用这些方法而定义的标准方式。为防止出现问题,请先使用大写字母。