通过curl获取Linkedin OAuth访问令牌,但通过urllib python无法获取

0 投票
1 回答
1325 浏览
提问于 2025-04-18 00:43

LinkedIn的API分为两个部分:第一部分是从LinkedIn获取授权码(用GET请求),第二部分是在大约10秒内使用这个授权码来获取访问令牌(用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错误。

response = 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'})))

我确保第一步和第二步中的重定向URI是匹配的,并且我快速调用第二步(这样授权码不会过期),同时确保两个请求中的client_id也是一致的。我不明白为什么Python的版本总是失败,而curl的版本却可以成功。我还尝试明确添加下面的头部,因为curl请求中有这个,但还是不行。

"Content-Type" : "Type: application/x-www-form-urlencoded"

求助!

1 个回答

0

我做了一件傻事。我把参数同时放在了请求的主体和网址的末尾。

撰写回答