3

我正在使用以下代码片段将 cookie 添加到 Android 中的 http 请求,使用 Android 的 DefaultHttpClient 发送:

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没有运气。有没有解决这个问题或者我错过了一些明显的东西?

4

2 回答 2

4

显然,调用cookie.setVersion(0);Cookie 应该可以解决这个问题,因为根据这个 SO answer在 cookie 规范的版本 0 中引号是无效的。

就我而言,由于这是我必须随请求一起发送的唯一 cookie,我只是自己将其添加为标头:

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

于 2013-11-25T21:50:52.357 回答
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 )

所以用户代理可以在值周围加上引号。

于 2013-11-12T15:13:10.150 回答