2

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

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

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

是不是 CookieHandler 不能与 Apache HttpClient 一起使用?

代码:

客户端.java

静止的 {
        CookieHandler.setDefault(new CookieHandler() {
                公共地图获取(URI u,列表 r){
                返回 Collections.singletonMap("Cookie",
                                Collections.singletonList(COOKIE_STRING));
                }
        });
}

使用 HttpClient(不按请求放置 cookie)

        HttpClient 客户端 = 新 DefaultHttpClient();
        HttpGet get = new HttpGet(HTTP_URL);
        client.execute(get);

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

        URL url = 新 URL(HTTP_URL);
        InputStream 是 = url.openStream();
4

1 回答 1

3

是不是 CookieHandler 不能与 Apache HttpClient 一起使用?

那是对的。

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

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

于 2011-02-22T23:46:06.617 回答