2014-03-31 95 views
0

LinkedIn API有兩部分:1)從LinkedIn獲取授權代碼(GET請求)2)使用10秒左右的授權代碼從LinkedIn獲取訪問令牌(POST請求)。我的示例請求如下:Linkedin OAuth通過curl獲取訪問令牌但不通過urllib python

下面的第一部分,我可以在瀏覽器中成功完成,重定向到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如下。 捲曲-v --data 「grant_type = authorization_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 1匹配,即我快速調用第二步(因此授權碼不會過期),並確保兩個調用中的client_id匹配。我不明白爲什麼Python版本總是失敗,但curl版本的工作原理。還嘗試明確地添加下面的B/C卷頭請求有它,但沒有骰子。 「Content-Type」:「類型:application/x-www-form-urlencoded」

幫助!

+0

你會得到什麼迴應(除了狀態碼400)?你有沒有嘗試沒有urlencode?看起來你可能會在redirect_uri中對冒號進行雙重編碼。 – wwwslinger

回答

0

我做了一些愚蠢的事情。我已經在URL的末尾傳遞了正文和參數兩個參數。

相關問題