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 要求を送信したときにのみ失敗します。
これが何であるか、または何を探すべきかについて誰か提案がありますか?