2

私の単純な Apache HttpClient (4.0.1) クライアント アプリケーションは、main() メソッドでサーバー URL に対して HttpGet 要求を行い、応答を出力します。起動時に、アプリケーションは java.net.CookieHandler の実装を静的ブロックに登録します。

サーバー側で受信した Cookie を確認したところ、HttpClient が GET 要求を行ったときに、サーバーが Cookie を受信して​​いないことがわかりました。

一方、Apache HttpClient をプレーンな java.net.URL(HTTP_URL).openStream() に置き換えたところ、Cookie は Request で CookieHandler によって設定され、サーバーによって受信されました。

CookieHandler が Apache HttpClient で動作しないということですか?

コード:

クライアント.java

静的 {
        CookieHandler.setDefault(新しい CookieHandler() {
                public Map get(URI u, List r) {
                return Collections.singletonMap("Cookie",
                                Collections.singletonList(COOKIE_STRING));
                }
        });
}

HttpClient の使用(リクエストに Cookie を配置しません)

        HttpClient クライアント = 新しい DefaultHttpClient();
        HttpGet get = 新しい HttpGet(HTTP_URL);
        client.execute(get);

java.net.URL を使用する(要求に応じて Cookie を設定する)

        URL url = 新しい URL(HTTP_URL);
        入力ストリームは = url.openStream();
4

1 に答える 1

3

CookieHandler が Apache HttpClient で動作しないということですか?

それは正しいです。

Apache HttpClient コードベースは、独自の Cookie および Cookie ストアの表現/メカニズムを使用します。HttpClient チュートリアルの関連セクションへのリンクを次に示します。(かなり大ざっぱですが、関連するクラスの javadoc を見れば、その使用方法を理解できるはずです。)

(古いバージョンの Apache HttpClient を使用している場合は、API が大幅に変更されていることに注意してください。)

于 2011-02-22T23:46:06.617 に答える