【问题标题】:Using Python's requests library instead of cURL使用 Python 的 requests 库而不是 cURL
【发布时间】:2013-06-03 22:45:07
【问题描述】:

我正在发出 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(和编程)的新手,因此非常感谢您的帮助。

【问题讨论】:

  • 该库名为requests,而不是Request,并且您附加的标签是错误的。 (我会解决的。)
  • 哎呀,对不起
  • 首先,请显示确切的结果,而不仅仅是“不给我访问权限”。同时,人们遇到此问题的一个常见原因是不必要的逃避。如果没有看到您的实际字符串,很难判断这是否是这里的问题。
  • 但是可以通过将curlrequests都发送到你控制的本地服务器并查看你得到的结果来判断这是否是问题所在。最简单的方法是运行nc -kl 8123(适用于具有BSD netcat 的平台,如Mac),并将URL 更改为http://localhost:8123/oauth/access_token。看看nc 在每种情况下打印出来的内容,以及两者之间的不同之处。
  • 等一下,我想我知道问题所在了。让我写一个答案,如果我错了,请告诉我……

标签: python api curl instagram python-requests


【解决方案1】:

您发送的是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&… 的内容,则意味着您的参数最终出现在 URL 上而不是发布数据中。

Putting Parameters in URLsMore complicated POST requests 在快速入门文档中了解完整的详细信息。


对于更复杂的调试,您可能需要考虑将curlrequests 都指向记录所有内容的本地服务器,并比较和对比每个客户端发送的内容。使用netcat

  • 在终端/DOS 窗口中,运行nc -kl 8123。 (实际参数会根据您的平台附带的 netcat 略有不同,或者,如果您的平台没有附带任何东西,例如 Windows,您选择安装哪一个。)
  • 运行 curl 命令,但使用 http://localhost:8123/oauth/access_token 作为 URL。
  • 运行 requests 脚本,再次使用 http://localhost:8123/oauth/access_token 作为 URL。

【讨论】:

  • 是的,你是对的! p.url 给了我一个包含数据参数的 url 结构。谢谢。我去看看 nc -kl 8123。
猜你喜欢
  • 2020-06-25
  • 1970-01-01
  • 2020-04-22
  • 2015-06-11
  • 1970-01-01
  • 2014-11-05
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多