在Instagram API调用中格式化重定向URI

时间:2015-09-14 21:46:02

标签: python instagram instagram-api pycurl

我正在使用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"}

我当前的客户端设置如下所示:

Client Settings

但是无论我现在似乎使用什么重定向URI,我都得到相同的消息。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

在第二次调用中用于交换访问令牌代码的重定向URI必须与第一次调用中使用的重定向URI匹配才能获取代码。来自文档:

redirect_uri:您在授权请求中使用的redirect_uri。注意:这必须与授权请求中的值相同。

https://instagram.com/developer/authentication/