我的简单 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/