簡體   English   中英

使用Python的請求庫而不是cURL

[英]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請求


對於更復雜的調試,您可能需要考慮將curlrequests指向記錄所有內容的本地服務器,並比較和對比每個客戶端發送的內容。 一個非常簡單快速和臟的方法是使用netcat

  • 在終端/ DOS窗口中,運行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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM