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 末尾的正文和参数。