我正在使用webpy编写一个python脚本来获取Instagram用户的身份验证令牌,并且我一直在反对“重定向URI与原始重定向URI不匹配”。它有点像这样:
第1步
用户首先访问http://localhost:8081/join
点击一个按钮,将其发送到Instagram登录页面,在那里他们被要求允许该应用访问他们的Feed:
class GetCode:
def POST(self):
data = web.input()
username = data.username
#Get Code...
sendData = {"client_id": CONFIG['client_id'],"redirect_uri": "http://localhost:8081/request-token","response_type": "code"}
codeRequest = requests.get('https://api.instagram.com/oauth/authorize/', params=sendData)
web.seeother(codeRequest.url)
第2步
脚本重定向到http://localhost:8081/request-token
,返回的代码附加到URL。这部分目前工作正常。然后我抓住代码并尝试获取访问令牌。我已经使用python-instagram库和pycurl尝试了这个部分,如下所示:
class RequestToken:
def GET(self):
received = web.input()
code = received.code
buffer = StringIO()
data ={
"client_id": CONFIG['client_id'],
"client_secret": CONFIG['client_secret'],
"grant_type":"authorization_code",
"redirect_uri":"http://localhost:8081/success/",
"code":code
}
postData = urlencode(data)
c = pycurl.Curl()
c.setopt(c.HTTPHEADER, ["Content-type: application/x-www-form-urlencoded"])
c.setopt(c.URL, 'https://api.instagram.com/oauth/access_token')
c.setopt(c.POSTFIELDS, postData)
c.setopt(c.WRITEDATA, buffer)
c.setopt(c.VERBOSE, True)
c.perform()
此时我收到{"code": 400, "error_type": "OAuthException", "error_message": "Redirect URI doesn't match original redirect URI"}
我当前的客户端设置如下所示:
但是无论我现在似乎使用什么重定向URI,我都得到相同的消息。任何帮助表示赞赏!
答案 0 :(得分:1)
在第二次调用中用于交换访问令牌代码的重定向URI必须与第一次调用中使用的重定向URI匹配才能获取代码。来自文档:
redirect_uri:您在授权请求中使用的redirect_uri。注意:这必须与授权请求中的值相同。