java - Apache HttpClient是否将java.net.CookieHandler设置的Cookie添加到Request中?

标签 java cookies apache-httpclient-4.x apache-httpcomponents

我的简单 Apache HttpClient (4.0.1) 客户端应用程序在 main() 方法中向服务器 URL 发出 HttpGet 请求并打印响应。启动时,应用程序在静态 block 中注册 java.net.CookieHandler 的实现。

在检查服务器端收到的cookie时,我发现当HttpClient发出GET请求时,服务器没有收到cookie。

另一方面,当我用普通的 java.net.URL(HTTP_URL).openStream() 替换 Apache HttpClient 时,cookie 由请求上的 CookieHandler 设置并由服务器接收。

CookieHandler 是否无法与 Apache HttpClient 一起使用?

代码:

Client.java

static {
        CookieHandler.setDefault(new CookieHandler() {
                public Map get(URI u, List r) {
                return Collections.singletonMap("Cookie", 
                                Collections.singletonList(COOKIE_STRING));
                }
        });
}

使用 HttpClient(不根据请求放置 cookie)

        HttpClient client = new DefaultHttpClient();
        HttpGet get = new HttpGet(HTTP_URL);
        client.execute(get);

使用 java.net.URL(根据请求设置 cookie)

        URL url = new URL(HTTP_URL); 
        InputStream is = url.openStream();

最佳答案

Is it that CookieHandler does not work with Apache HttpClient?

这是正确的。

Apache HttpClient 代码库使用自己的 cookie 和 cookie 存储表示/机制。这是 HttpClient tutorial 相关部分的链接。 (它非常粗略,但是如果您查看相关类的 javadoc,您应该能够弄清楚如何使用它。)

(如果您使用旧版本的 Apache HttpClient,请注意 API 已发生重大变化。)

关于java - Apache HttpClient是否将java.net.CookieHandler设置的Cookie添加到Request中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5084970/

相关文章:

.net - 在 .NET 2.0 中使用 "Remember Me"功能进行身份验证

java - HttpResponse header 的 Junit 测试

java - 如何在java http请求中获取代理响应?

java - 如何在树节点中没有父链接的情况下获取二叉树的根?

java - 应用通过 APK 崩溃,但在本地运行

java - 静态 ConcurrentHashMap 副本中的值对象是否会引用与原始值对象相同的值对象?

java - 获取 "Set-Cookie" header

java - 如何将整数拆分为单个数字,然后对每个数字进行平方?

http - 清理来自 apache HttpClient 的响应记录(没有 15 :44:59. 689 [http-nio-8080-exec-4] DEBUG org.apache.http.wire - http-outgoing-0 <<)

java - 使用HTTPClient制作爬虫