[英]Using Python's requests library instead of cURL
我正在發出POST請求以嘗試獲取API訪問令牌。 我正在使用Python,我從文檔中給出的示例使用cURL庫如下...
curl \-F 'client_id=CLIENT-ID' \
-F 'client_secret=CLIENT-SECRET' \
-F 'grant_type=authorization_code' \
-F 'redirect_uri=YOUR-REDIRECT-URI' \
-F 'code=CODE' \https://api.instagram.com/oauth/access_token
我正在使用Python請求庫,並編寫了以下內容......
data =
{'client_id':'xxxxxxxxxxxxxxxxxx',
'client_secret':'xxxxxxxxxxxxxxxxxx',
'grant_type':'authorization_code',
'redirect_uri':'http://localhost:14080/newpage',
'code':code}
token_url = 'https://api.instagram.com/oauth/access_token'
p = requests.post(token_url, params = data)
URL不能讓我訪問,我想知道的是我寫的與文檔示例的不同之處。 我是Python(和編程)的新手,所以非常感謝幫助。
你發送的是params
,而不是data
:
p = requests.post(token_url, params = data)
將字典作為params
參數傳遞時, requests
嘗試將其作為URL上查詢字符串的一部分發送。
當您將字典作為data
參數傳遞時, requests
將對其進行格式編碼並將其作為POST數據發送,這相當於curl的-F
所做的。
您可以通過查看請求URL來驗證這一點。 如果print(p.url)
顯示類似http://api.instagram.com/oauth/access_token?client_id=xxxxxx&client_secret=xxxxx&…
print(p.url)
,則表示您的參數最終在URL上而不是在帖子數據中。
有關完整詳細信息,請參閱快速入門文檔中的在URL中放置參數和更復雜的POST請求 。
對於更復雜的調試,您可能需要考慮將curl
和requests
指向記錄所有內容的本地服務器,並比較和對比每個客戶端發送的內容。 一個非常簡單快速和臟的方法是使用netcat :
nc -kl 8123
。 (實際參數根據您的平台附帶的netcat略有不同 - 或者,如果您的平台沒有附帶任何內容,例如Windows,您選擇安裝哪一個。) curl
命令,但使用http://localhost:8123/oauth/access_token
作為URL。 requests
腳本,再次使用http://localhost:8123/oauth/access_token
作為URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.