Cookies 为什么http组件HttpClient从Cookie值中删除引号?

Cookies 为什么http组件HttpClient从Cookie值中删除引号?,cookies,apache-httpclient-4.x,apache-httpcomponents,Cookies,Apache Httpclient 4.x,Apache Httpcomponents,我有一个应用程序,它使用4.4.7进行RESTAPI调用 我遇到了这样一种情况,即针对安全的web应用程序制作API: HTTP GET请求1: 它发现我丢失了一个JESSIONID cookie,所以它通过302将我发送到另一个页面以获取一个: 302获取请求2: 此页面读取我的SSO会话cookie,然后将我发送回原始请求: HTTP GET请求3: 很简单,很正常。但是在GET请求2期间,创建了一个特殊的cookie,如下所示: J-Login-Cookie="a8966ab6c6d65a

我有一个应用程序,它使用4.4.7进行RESTAPI调用

我遇到了这样一种情况,即针对安全的web应用程序制作API:

HTTP GET请求1:

它发现我丢失了一个JESSIONID cookie,所以它通过302将我发送到另一个页面以获取一个:

302获取请求2:

此页面读取我的SSO会话cookie,然后将我发送回原始请求:

HTTP GET请求3:

很简单,很正常。但是在GET请求2期间,创建了一个特殊的cookie,如下所示:

J-Login-Cookie="a8966ab6c6d65a7d6a"
J-Login-Cookie=a8966ab6c6d65a7d6a
但当HTTP客户端将此cookie保存到cookie存储时,它会这样保存:

J-Login-Cookie="a8966ab6c6d65a7d6a"
J-Login-Cookie=a8966ab6c6d65a7d6a
它删除了引号

为什么呢?我必须使用
HttpRequestInterceptor
将我的引号添加回cookie值,以便请求3不会失败。有没有办法让它停止删除那些引号


curl
没有相同的行为

从此处的值中删除周围的引号:

从外观上看,您可以用撇号将引用的值括起来。在发出重定向请求之前,遍历所有Cookie以查找
J-Login-Cookie
,并将值从
“a8966ab6c6d65a7d6a”
更改为
““a8966ab6c6d65a7d6a”
,以便仅删除外部撇号

这与使用拦截器基本相同。您唯一的其他选择是使用不同的HTTP客户端库。

出现了完全相反的行为

我还发现了为什么Apache HTTP客户端的行为是正确的(除了RFC本身)

更新


ApacheHTTP客户端cookie的源代码,以及其中一些源代码。链接指向
主分支
分支,可根据需要自由填写以调整分支和提交版本

是关于相反行为的问题。还有一个解释,为什么ApacheHTTP客户机的行为是正确的(除了RFC本身),是的,我认为这比目前关于这个问题的答案更正确。虽然答案仍然有用,因为它链接到具有相同行为的HttpCookie(JDK的一部分)。我已将我的评论作为答案发布。请包含一些代码,说明如何实例化客户端和执行REST调用。这就是
HttpCookie
,但我使用的是apache httpcomponents httpclient4.x。它们看起来不一样。是的,我已经在通过cookie进行迭代,并使用请求拦截器向我知道缺少的cookie重新添加引号。您是否有机会在apache http客户端中找到删除引号的源的链接?上面的答案包括,但由于项目错误,我更新了答案