1

Facebook から access_token を取得しようとすると、ステータス コード 404 が返されます。これは Java で記述された GAE アプリであり、プログラムで access_token を取得しています。つまり、「コード」を取得したら、https リクエストを作成して access_token を取得します。私は restlet.org フレームワークを使用しています。

public void getAccessToken( final Map<String,String> filter ) {
    //prepare and issue the request. Send in the host and other data
    String url = Application.getInstance().getAccessTokenUrl( this.getReference().getHostIdentifier(), filter );

    Client client = new Client(Protocol.HTTPS);
    client.setConnectTimeout(5000);
    Request request = new Request(Method.GET, url);

    client.handle(request, new Uniform() {
        @Override
        public void handle(Request arg0, Response response) {
            if ( response.getStatus().isSuccess() ) {
                if ( response.isEntityAvailable() ) {  
                    String result = response.getEntityAsText();
                    String results[] = result.split("&");
                    String accessTokens[] = results[0].split("=");
                    filter.put("access_token", accessTokens[1]);
                }
            } else {
                // the user doesn't exist
                log.warning("getAccessToken, description - " + response.getStatus().getDescription() + ", code - " + response.getStatus().getCode() + ", all - " + response.getStatus().toString());
                setStatus(new Status(Status.CLIENT_ERROR_NOT_FOUND, "Failed to get facebook access code."));
            }
        }
    });
}

ここで、code、client_id、client_secret、redirectUrl をすべて組み合わせて正しい http URL を作成します。

これは、開発環境 (192.168.1.../facebook/signin) からローカルで実行すると完全に機能します。ただし、GAE で実行すると、access_token を取得しようとすると 404 が返されます。GAE が送信している http 要求をログに記録しましたが、正しいです。つまり、リクエスト ( https://graph.facebook.com/oauth/access_token?client_id=298631 ... ) をブラウザにプラグインすると、access_token が正しく返されます。これにより、Facebook でアプリの設定が正しいことが確認されたと思います。

したがって、開発システムからコードを実行すると正しく実行され、GAE が送信する URL をブラウザーにプラグインすると正しく実行され、GAE が http 要求を送信したときにのみ失敗します。

これが何であるか、または何を探すべきかについて誰か提案がありますか?

4

0 に答える 0