2016-10-14 75 views
0

在我的程序中,我試圖訪問https://api.dropbox.com/1/oauth2/token。爲了做到這一點,我試圖使用http.client.HTTPSConnection()。不過,我從服務器接收400聲明,即使當我通過我的瀏覽器發送相同的請求,我得到一個實際的響應:Python連接到HTTP服務器

{"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庫發送適當的請求?

+2

嘗試使用大寫'GET'? –

+0

@菲利普Tzou我不能相信這實際上修復它!請發佈是一個答案,所以我可以接受它 –

+0

可能值得看看['requests'](http://docs.python-requests.org/en/master/) –

回答

2

TL; DR:將小寫'get'更改爲大寫'GET'應解決問題。

原因是:根據第5.1.1節,RFC2616

的方法令牌指示方法中由所述的Request-URI所標識的資源 執行。該方法區分大小寫。

RFC2616還定義了8種方法,分別是「OPTIONS」,「GET」,「HEAD」,「POST」,「PUT」,「DELETE」,「TRACE」和「CONNECT」。他們都是大寫字母。

我們確實知道一些HTTP客戶端,如python-requestsjQuery.ajax也支持小寫字母的方法,但它們不是RFC定義的使用這些方法的標準方式。爲防止出現問題,請首先使用大寫字母。

+0

'requests'會是一個更相關的小寫例如,因爲這是一個蟒蛇問題 –

+0

@ cricket_007很好的建議。添加。 :) –