在我的计划中,我正在尝试访问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
库发送正确的请求?
答案 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-requests
和jQuery.ajax
)也支持小写方法,但它们不是RFC为使用这些方法而定义的标准方式。为防止出现问题,请先使用大写字母。