Java Apache httpclient 4.4中忽略Cookie

Java Apache httpclient 4.4中忽略Cookie,java,apache-httpclient-4.x,Java,Apache Httpclient 4.x,我将ApacheHTTP客户机从4.3.6升级到4.4,发现cookies被忽略了。知道如何让cookie在4.4中工作吗 编辑:代码段 CookieStore cookieStore = new BasicCookieStore(); cookieStore.addCookie(new BasicClientCookie("name", "value")); RequestConfig config = RequestConfig.custom().setCookieSpec(CookieSp

我将ApacheHTTP客户机从4.3.6升级到4.4,发现cookies被忽略了。知道如何让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\u STRICT
,但似乎没有一个有效。

您的示例应用程序中的cookie通过默认策略和标准策略与cookie源代码匹配。我怀疑这是一个HttpClient问题

BasicClientCookie cookie = new BasicClientCookie("name", "value");
cookie.setDomain("0.0.0.0");

CookieOrigin cookieOrigin = new CookieOrigin("0.0.0.0", 8000, "/", false);

DefaultCookieSpec defaultCookieSpec = new DefaultCookieSpec();
System.out.println("Default policy match :" + defaultCookieSpec.match(cookie, cookieOrigin));

RFC6265LaxSpec standardCookieSpec = new RFC6265LaxSpec();
System.out.println("Standard (RFC 6265) policy match :" + standardCookieSpec.match(cookie, cookieOrigin));

用于查看HttpClient生成的cookie头的类型。我已经使用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的cookie规范

为了使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);

您不显示任何代码。您是否尝试了建议的一切?我们希望帮助回答您的问题,但是我们可能需要更多信息,请提供一些您遇到问题的代码示例。你在做饼干吗?您注意到哪个浏览器存在此问题?添加了代码段。在4.3中,我也不需要指定CookieSpec,它只是起作用。你确定它在任何版本中都起作用吗?所讨论的cookie没有域属性,因此它永远不会与任何cookie源匹配cookie可以为不同的路径(目录)、“/”或“/admin”等设置cookie,但您不使用
.setPath(“/”)
-可能吧?我编写的示例服务器能够读取cookie,但实际上我正在呼叫第三方服务,该服务要求请求中包含一个cookie。当我尝试使用当前版本的httpclient点击它时,它停止工作。因此,cookie不会被忽略,但某些第三方服务器无法处理它,这是一个完全不同的故事。是的,我在发布问题并使用我的简单服务器后才发现。尝试将CookieSpec设置为标准:{CookieStore CookieStore=new BasicCookieStore();RequestConfig globalConfig=RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();CloseableHttpClient=HttpClientBuilder.create().setDefaultRequestConfig(globalConfig).setDefaultCookieStore(CookieStore.build();}好极了!我刚刚用你的答案结束了两周的搜索。