【问题标题】:Android: BasicClientCookie/CookieStore adds quotes around cookie valueAndroid:BasicClientCookie/CookieStore 在 cookie 值周围添加引号
【发布时间】:2013-11-26 05:50:52
【问题描述】:

我正在使用以下 sn-p 代码将 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,但没有成功。是否有解决此问题的方法,还是我遗漏了一些明显的东西?

【问题讨论】:

    标签: java android cookies apache-commons-httpclient


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      RFC 6265:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-02
        • 1970-01-01
        相关资源
        最近更新 更多