Android: BasicClientCookie/CookieStore会在cookie值周围添加引号

3
我正在使用以下代码片段,在 Android 上使用 DefaultHttpClient 发送 Http 请求时添加 cookie:

我正在使用以下代码片段,在 Android 上使用 DefaultHttpClient 发送 Http 请求时添加 cookie:

CookieStore cookieStore = new BasicCookieStore();
BasicClientCookie2 cookie = new BasicClientCookie2("AUTH_TOKEN", "MY_TOKEN");
cookie.setVersion(1);
cookie.setDomain("my.domain.com");
cookie.setPath("/");
cookieStore.addCookie(cookie);

context.setAttribute(ClientContext.COOKIE_STORE, cookieStore);

当我查看服务器上收到的cookie值时,我得到了下面的结果:

Cookie: $Version=1; AUTH_TOKEN="MY_TOKEN"

但我期望的是(注意引号缺失):
Cookie: $Version=1; AUTH_TOKEN=MY_TOKEN

不幸的是,这些额外的引号会导致服务器(我无法管理)陷入困境,并完全忽略 cookie。

我尝试使用 BasicClientCookie 替代 BasicClientCookie2,但没有成功。是否有解决方法或者我遗漏了一些显而易见的东西?

2个回答

4
显然,在 Cookie 上调用 cookie.setVersion(0); 应该可以解决此问题,因为根据 这个 SO 回答,在 cookie 规范的版本 0 中,引号是无效的。
在我的情况下,由于这是我发送请求时唯一需要发送的 cookie,我只需自己将其添加为标头即可:

post.addHeader("Cookie", "AUTH_TOKEN=" + myAuthToken);


0

RFC 6265:

cookie-header = "Cookie:" OWS cookie-string OWS
cookie-string = cookie-pair *( ";" SP cookie-pair )
cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )

因此,用户代理可以在值周围使用引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接