7

这可能是一个非常愚蠢的问题,但我已经盯着这个几个小时了,找不到我做错了什么。

我正在尝试使用 Python 对 Facebook API 进行身份验证,但在请求用户访问令牌时遇到问题。收到代码后,我向https://graph.facebook.com/oauth/access_token发出请求,如下所示:

conn = httplib.HTTPSConnection("graph.facebook.com")
params = urllib.urlencode({'redirect_uri':request.build_absolute_uri(reverse('some_app.views.home')),
                           'client_id':apis.Facebook.app_id,
                           'client_secret':apis.Facebook.app_secret,
                           'code':code})
conn.request("GET", "/oauth/access_token", params)
response = conn.getresponse()
response_body = response.read()

作为回应,我收到

{"error":{"message":"缺少 redirect_uri 参数。","type":"OAuthException","code":191}}

有什么想法可能会出错吗?我已经验证了正在传递的redirect_uri 在应用程序域上,但是这可能是一个问题,这是在本地托管并且该域只是通过我的主机文件重定向到本地主机吗?

谢谢你的帮助!

编辑:

我使用请求库得到了这个工作:

params = {'redirect_uri':request.build_absolute_uri(reverse('profiles.views.fb_signup')),
                           'client_id':apis.Facebook.app_id,
                           'client_secret':apis.Facebook.app_secret,
                           'code':code}

r = requests.get("https://graph.facebook.com/oauth/access_token",params=params)

但是,当本机支持该库时,我仍然更愿意依赖库,而没有太多困难。可能这个要求太高了……

4

1 回答 1

2

在您的第一个示例(使用 的示例HTTPSConnection)中,您传入params了请求的正文:

conn.request("GET", "/oauth/access_token", params)

这是不正确的(GET 请求不应该有正文)。相反,参数应该作为 URL 的查询字符串部分传递:

conn.request("GET", "/oauth/access_token?" + params) 
于 2013-10-12T05:10:46.923 回答