4

CookieHandlerがシステム全体でどのように機能するかはわかりません。CookieHandlerのソースを表示しましたが、get/setメソッド以外の情報は見つかりませんでした。TCP / HTTP接続は、私が設定したCookieHandlerのインスタンスをどこで使用しますか

CookieHandler.setDefault(...)

どのソースファイルを参照する必要がありますか?URLConnectionHttpURLConnectionそれとは関係がないようです。

助けて、よろしくお願いします。


編集:setDefault呼び出され た1つのインスタンスにのみCookieHandlerを適用することは可能ですか?

4

2 に答える 2

1

javadoc forjava.net.CookieManagerは、 CookieHandlerがどのように適合するかのかなり良い概要を提供します。

于 2012-04-11T03:11:10.257 に答える
0

これを使えば動くようになりました

private static class DelegatingCookieManager extends CookieManager {
    @Override public void setCookiePolicy(CookiePolicy cookiePolicy) {
        delegate.get().setCookiePolicy(cookiePolicy);
    }

    @Override public CookieStore getCookieStore() {
        return delegate.get().getCookieStore();
    }

    @Override public Map<String, List<String>> get(
            URI uri, Map<String, List<String>> requestHeaders)
            throws IOException {
        return delegate.get().get(uri, requestHeaders);
    }

    @Override public void put(URI uri, Map<String,
            List<String>> responseHeaders)
            throws IOException {
        delegate.get().put(uri, responseHeaders);
    }
}

これはグローバルにインストールされます

static {
    CookieHandler.setDefault(new DelegatingCookieManager());
}

しかし、状態とデリゲートを持たない

private static final ThreadLocal<CookieManager> delegate =
     new ThreadLocal<CookieManager>();

使用されるクラスでインスタンス化されます

private final CookieManager ownCookieManager = new CookieManager();

お気に入り

delegate.set(ownCookieManager);
doRequest();
于 2014-05-15T08:27:20.303 に答える