我正在使用以下代码段将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
而没有运气。有没有解决这个问题,还是我错过了一些明显的东西?
答案 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 )
因此,用户代理可以在价值附近加上引号。