【问题标题】:Java, let CookieHandler work on only one instanceJava,让 CookieHandler 只在一个实例上工作
【发布时间】:2011-05-31 09:49:41
【问题描述】:

我不知道 CookieHandler 在系统范围内是如何工作的,我确实查看了 CookieHandler 的源代码,但除了 get/set 方法之外没有找到更多信息。 TCP/HTTP 连接在哪里使用我设置的 CookieHandler 实例

CookieHandler.setDefault(...)

我应该参考哪个源文件? URLConnection & HttpURLConnection 似乎与此无关。

帮助,在此先感谢。


编辑: 是否可以仅将 CookieHandler 应用于调用 setDefault 的一个实例。

【问题讨论】:

  • 我一直在想同样的事情。这个page 可能有一些信息,即“也就是说,使用 HTTP 作为协议的 URL,例如 new URL("http://example.com"),将使用 HTTP 协议处理程序。如果设置,此协议处理程序回调到 CookieHander 对象,以处理状态管理。”

标签: java cookies setcookie


【解决方案1】:

我用这个让它工作了

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());
}

但没有状态和委托给a

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

在使用它的类中实例化

private final CookieManager ownCookieManager = new CookieManager();

喜欢

delegate.set(ownCookieManager);
doRequest();

【讨论】:

  • 我转向了 HttpClient,setCookieStore 方法。
  • @user435657 这可能是要走的路。就是几兆字节的代码对于解析和编写一行代码来说感觉太多了(Cookie/Set-Cookie)。
【解决方案2】:

javadoc for java.net.CookieManager 很好地概述了 CookieHandler 如何适应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-07
    相关资源
    最近更新 更多