首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cookie标头无效:当expires属性为空时,无法分析expires属性

cookie标头无效:当expires属性为空时,无法分析expires属性
EN

Stack Overflow用户
提问于 2012-02-29 22:17:05
回答 2查看 21.8K关注 0票数 10

在安卓应用程序中,当使用DefaultHttpClient获取URL内容(执行HttpGet)时,我在日志中收到以下警告:

代码语言:javascript
复制
W/ResponseProcessCookies(20386): Invalid cookie header: "Set-Cookie: NSC_vbue_iuuq=ffff660; expires=; domain=private.false.name; path=/; isSecure=false". Unable to parse expires attribute:

我理解该警告,因为expires字段不包含有效的日期格式。我理解它可能是因为它是一个“会话cookie”(不是专家)。Thread about similar situation in Curl context

在网上搜索,我发现主要是

代码语言:javascript
复制
.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH (or other) )

选项,以通过正确分析包含逗号的日期来避免警告。

但是,我希望避免使用该日志。(不是通过禁用日志)我相信在内部一切都很好,因为“我猜”,cookie.setExpiryDate()根本不会被调用。

您认为我是否需要对HTTP客户端进行特定配置(我尚未设置特定配置)来避免该警告或支持空过期?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-29 22:42:52

如果你不介意改变CookieSpec,你可以提供你自己的,更宽松的子类。

首先,创建一个宽松的CookieSpec,它将接受nullexpires属性的空值,如下所示:

代码语言:javascript
复制
class LenientCookieSpec extends BrowserCompatSpec {
    public LenientCookieSpec() {
        super();
        registerAttribHandler(ClientCookie.EXPIRES_ATTR, new BasicExpiresHandler(DATE_PATTERNS) {
            @Override public void parse(SetCookie cookie, String value) throws MalformedCookieException {
                if (TextUtils.isEmpty(value)) {
                    // You should set whatever you want in cookie
                    cookie.setExpiryDate(null);
                } else {
                    super.parse(cookie, value);
                }
            }
        });
    }
}

现在,您需要在您的HTTP客户端中注册并选择这个新的CookieSpec

代码语言:javascript
复制
DefaultHttpClient client = new DefaultHttpClient();
client.getCookieSpecs().register("lenient", new CookieSpecFactory() {
        public CookieSpec newInstance(HttpParams params) {
            return new LenientCookieSpec();
        }
    });
HttpClientParams.setCookiePolicy(client.getParams(), "lenient");

“像这样”的东西可以为你工作。

票数 4
EN

Stack Overflow用户

发布于 2020-10-01 17:32:37

我刚刚收到类似的警告,如下所示

代码语言:javascript
复制
Invalid cookie header: "Set-Cookie: A3=d=AQABBPA3c18CEOtNC3d8X1pEkCvrf2cxZRIFEgEBAQGJdF99XwAAAAAA_SMAAA&S=AQAAAiTHBvO_oaoz8tCr1A7ArCs; Expires=Wed, 29 Sep 2021 19:34:41 GMT; Max-Age=31557600; Domain=.yahoo.com; Path=/; SameSite=None; Secure; HttpOnly". Invalid 'expires' attribute: Wed, 29 Sep 2021 19:34:41 GMT

我的环境是http client-4.5.12,原因是需要设置cookiesSpec。

修复方法(忽略其他参数)

代码语言:javascript
复制
requestConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();

        httpclient = HttpClients.custom()
               .setDefaultRequestConfig(requestConfig).build();

在这里你可以根据你的情况改变CookieSpecs.XXX,大多数情况下,标准就可以了,详细信息可以参考最新的apache文档https://hc.apache.org/httpcomponents-client-4.5.x/tutorial/html/statemgmt.html

注意,HttpClientParams (前面提到的一些页面)是一个不推荐使用的类,只需使用RequestConfig作为替代即可。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9500714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档