LinkedIn OAuth 通过 curl 获取访问令牌,但不是通过 urllib python 获取



LinkedIn API 有两个部分:1) 从LinkedIn获取授权代码(GET 请求)2) 使用 10 秒左右的授权代码从LinkedIn获取访问令牌(POST 请求)。我的示例请求如下:

下面的第一部分,我可以在浏览器中成功完成,重定向到LinkedIn,并获取授权代码。https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=XXXXX&state=ddlkjdfkljdfkljdfk&redirect_uri=http%3A//localdev.boxuno.com%3A8888/auth/linkedinOauth1Callback

第二部分,我可以成功地使用 curl 做,如下所示。curl -v --data "grant_type=authorization_code&code=XXXXX&redirect_uri=http%3A//localdev.boxuno.com%3A8888/auth/linkedinOauth1Callback&client_id=XXXXX&client_secret=XXXXX" https://www.linkedin.com/uas/oauth2/accessToken

但是如果我在 Python 中使用 urllib 来构造 http POST 请求。它不起作用:我得到 400。响应 = urllib2.urlopen(urllib2.Request(url, urllib.urlencode({'code': 'XXXXX', 'grant_type':'authorization_code', 'redirect_uri': 'http%3A//localdev.boxuno.com%3A8888/auth/linkedinOauth1Callback

', 'client_id': 'XXXXX', 'client_secret': 'XXXXX})))

我已经确保步骤1和2中的重定向URI匹配,我快速调用第二步(因此授权代码不会过期),并确保client_id在两次调用中都匹配。我不明白为什么 Python 版本总是失败,但 curl 版本有效。还尝试在 b/c 下方显式添加标题,curl 请求有它,但没有骰子。 "Content-Type" : "Type: application/x-www-form-urlencoded"

帮助!

我做了一件愚蠢的事情。我已经将参数传递给了 URL 末尾的正文和参数。

最新更新