java - Apache httpclient 4.4 中的 Cookie 被忽略

标签 java apache-httpclient-4.x

我将 Apache http 客户端从 4.3.6 升级到 4.4,并观察到 ​​cookie 被忽略。知道如何让 cookie 在 4.4 中工作吗?

编辑:代码片段

CookieStore cookieStore = new BasicCookieStore();
cookieStore.addCookie(new BasicClientCookie("name", "value"));
RequestConfig config = RequestConfig.custom().setCookieSpec(CookieSpecs.DEFAULT).build();
HttpClient client = HttpClientBuilder.create()
    .disableRedirectHandling()
    .setDefaultRequestConfig(config)
    .setDefaultCookieStore(cookieStore)
    .build();

我尝试了 CookieSpecs.DEFAULTCookieSpecs.STANDARDCookieSpecs.STANDARD_STRICT 但似乎都不起作用。

最佳答案

我已经使用版本 4.3.6 和 4.5 执行了示例代码。在 4.3.6 中,我使用了 RequestConfig.DEFAULT 并且工作正常。 4.5 则返回

java.lang.NullPointerException: while trying to invoke the method java.lang.String.equalsIgnoreCase(java.lang.String) of a null object loaded from local variable 'domain'
at org.apache.http.impl.cookie.PublicSuffixDomainFilter.match(PublicSuffixDomainFilter.java:76)
at org.apache.http.impl.cookie.CookieSpecBase.match(CookieSpecBase.java:135)
at org.apache.http.impl.cookie.DefaultCookieSpec.match(DefaultCookieSpec.java:177)
at org.apache.http.client.protocol.RequestAddCookies.process(RequestAddCookies.java:165)

此更改已于 2014 年 12 月 19 日晚上 10:59 添加修订版 1646864:

RFC 6265 compliant cookie spec

为了使 4.5 版本正常工作,您需要为 cookie 设置域,并且该域不等于确切的主机org.apache.http.cookie.ClientCookie.DOMAIN_ATTR必须设置:

    BasicClientCookie cookie = new BasicClientCookie("cookieName", "cookieValue");
    cookie.setDomain(".my.domain.com");
    cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "true");
    CookieStore cookieStore = new BasicCookieStore();
    cookieStore.addCookie(cookie);

关于java - Apache httpclient 4.4 中的 Cookie 被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29970409/

相关文章:

java - 尝试对 kml 文件中的一些地标进行排序

java - 使用 Glide,ArrayList 在 ViewPager 中重复自身?

java - 如何通过 Java 中的 REST api 在 JIRA 中创建问题?

httpclient - setDefaultRequestConfig方法会覆盖系统属性 - CloseableHttpClient

java - 在java中发出HttpClient请求

java - 树搜索功能没有给出预期的结果

java - 为什么在 JUnit 中不推荐使用 assertEquals(double,double)?

java - 在java中使用gss/kerberos身份验证进行抢先身份验证

java - 使用带有 Cookie 持久性的改造

java - Android Studio - 资源条目已定义