我将 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.DEFAULT
、CookieSpecs.STANDARD
和 CookieSpecs.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/