小编niv*_*ivs的帖子

如何使用HttpURLConnection和Java中的CookieManager为每个连接使用不同的cookie

我需要使用HttpURLConnection同时从多个线程连接到一个网站,但是为每个连接使用不同的cookie.由于Java仅支持设置全局CookieManager,因此我实现了以下hack.

CookieHandler.setDefault(new CookieManager())我没有调用,而是实现了一个自定义CookieHandler,它CookieStore为每个线程使用不同的实例,在每次请求后清除它.

我创建类调用SessionCookieManager基于源代码CookieManager.

cookieJar成员变量被除去,及其使用已被替换getCookieStore().

添加了以下代码:

public class SessionCookieManager extends CookieHandler {
    private final static SessionCookieManager ms_instance = new SessionCookieManager();

    public static SessionCookieManager getInstance() {
        return ms_instance;
    }

    private final static ThreadLocal<CookieStore> ms_cookieJars = new ThreadLocal<CookieStore>() {
        @Override
        protected synchronized CookieStore initialValue() { return new sun.net.www.protocol.http.InMemoryCookieStore(); }
    };

    public void clear() {
        getCookieStore().removeAll();
    }

    public CookieStore getCookieStore() {
        return ms_cookieJars.get();
    }
Run Code Online (Sandbox Code Playgroud)

在第一个请求之前,自定义CookieManager设置为全局默认值CookieHandler …

java cookies httpurlconnection cookiestore

8
推荐指数
1
解决办法
3723
查看次数

标签 统计

cookies ×1

cookiestore ×1

httpurlconnection ×1

java ×1