Android:BasicClientCookie / CookieStore在cookie值附近添加引号

时间:2013-11-12 05:23:57

标签: java android cookies apache-commons-httpclient

我正在使用以下代码段将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而没有运气。有没有解决这个问题,还是我错过了一些明显的东西?

2 个答案:

答案 0 :(得分:2)

显然,在Cookie上调用cookie.setVersion(0);会解决此问题,因为根据this SO answer,Cookie规范的版本0中的引号无效。

在我的情况下,由于这是我必须随请求发送的唯一cookie,我只是将其自己添加为标题:

  

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

答案 1 :(得分: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 )

因此,用户代理可以在价值附近加上引号。