20

Apache HttpComponents ライブラリを使用して AppEngine アプリケーションに接続しています。ユーザーを認証するには、認証トークンをアプリケーションのログイン アドレス ( http://myapp.appspot.com/_ah/login?auth=.. .) に渡し、ヘッダーから Cookie を取得する必要があります。応答。しかし、ログイン ページはリダイレクト ステータス コードで応答し、HttpClient がリダイレクトに従うのを止める方法がわからないため、Cookie をインターセプトできません。

Fwiw、リクエストを送信するために使用する実際の方法は以下のとおりです。

private void execute(HttpClient client, HttpRequestBase method) {
    // Set up an error handler
    BasicHttpResponse errorResponse = new BasicHttpResponse(
            new ProtocolVersion("HTTP_ERROR", 1, 1), 500, "ERROR");

    try {
        // Call HttpClient execute
        client.execute(method, this.responseHandler);
    } catch (Exception e) {
        errorResponse.setReasonPhrase(e.getMessage());
        try {
            this.responseHandler.handleResponse(errorResponse);
        } catch (Exception ex) {
            // log and/or handle
        }
    }
}

クライアントがリダイレクトをたどらないようにするにはどうすればよいですか?

ありがとう。

更新

以下の解決策に従って、作成後(およびメソッドDefaultHttpClient clientに渡す前)に次のことを行いました。execute

if (!this.followRedirect) {
    client.setRedirectHandler(new RedirectHandler() {
        public URI getLocationURI(HttpResponse response,
                HttpContext context) throws ProtocolException {
            return null;
        }

        public boolean isRedirectRequested(HttpResponse response,
                HttpContext context) {
            return false;
        }
    });
}

必要以上に冗長ですが、思ったほど難しくはありません。

4

5 に答える 5

29

http パラメータを使用して実行できます。

final HttpParams params = new BasicHttpParams();
HttpClientParams.setRedirecting(params, false);

このメソッドには javadoc はありませんが、ソースを見ると次のように設定されていることがわかります。

HANDLE_REDIRECTS

以下を制御します。

リダイレクトを自動的に処理するかどうかを定義します

于 2009-11-09T05:09:37.937 に答える
11

バージョン 4.3.x の HttpClient では、clientBuilderに直接含まれています。

したがって、クライアントをビルドするときに次を使用します。

CloseableHttpClient client = clientBuilder.disableRedirectHandling().build();

古い質問であることは知っていますが、私もこの問題を抱えていたので、解決策を共有したいと思います。

于 2014-08-27T06:44:23.880 に答える
6

を使用してみてくださいRedirectHandlerDefaultHttpClientからカスタム実装を返すように拡張する必要がある場合がありますcreateRedirectHandler()

于 2009-08-30T17:27:15.463 に答える