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()

それに応じて、私は受け取ります

{"エラー":{"メッセージ":"redirect_uri パラメーターがありません。","タイプ":"OAuthException","コード":191}}

何がうまくいかないのでしょうか?渡された redirect_uri がアプリ ドメインにあることは既に確認しましたが、これがローカルでホストされていて、そのドメインがホスト ファイルによって localhost にリダイレクトされただけであることが問題になる可能性がありますか?

ご協力いただきありがとうございます!

編集:

requests ライブラリを使用してこれを機能させました:

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 に答える