[英]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.