无效的Cookie头:无法解析属性到期时到期属性为空 [英] Invalid cookie header : Unable to parse expires attribute when expires attribute is empty

查看:2664
本文介绍了无效的Cookie头:无法解析属性到期时到期属性为空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一个Android应用程序,在使用 DefaultHttpClient 来获得一个URL内容(执行HTTPGET)我收到日志中以下警告:

In an android application, when using DefaultHttpClient to get an URL content (executing HttpGet) I receive the following warning in logs:

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:

我理解的警告,因为终止字段不包含一个有效的日期格式。我的理解,也许因为它是一个会话cookie(不被专家)。关于卷曲方面类似的情况主题

I understand the warning because the expires field does not contain a valid date format. I understand it maybe because it is a 'session cookie' (without being expert). Thread about similar situation in Curl context

在搜索,我发现主要是在网络中

Searching the web I found mainly the

.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH (or other) )

选项,通过解析正确日期包含逗号避免警告。

option to avoid warning by parsing correctly dates that contain a comma.

不过,我想避免这种情况的日志。 (不通过禁用日志) 我相信国内所有的罚款,因为我猜, cookie.setExpiryDate()根本就没有叫。

However, I would like to avoid that log. (not by disabling logs) I believe internally all is fine since "I GUESS", cookie.setExpiryDate() is simply not called.

你觉得我需要我的HTTP客户端的具体配置(我还没有确定具体的配置),以避免该警告或支持空到期?

Do you think I need a specific configuration of my HTTP client (I've not set specific configurations) to avoid that warning or to support empty expires?

感谢。

推荐答案

如果你不介意改变 CookieSpec 您可以提供自己的,比较宽大,子类。

If you do not mind altering the CookieSpec you can supply your own, more lenient, subclass.

首先,创建一个宽松的 CookieSpec 将接受和空值的过期属性,像这样的:

First, create a lenient CookieSpec that will accept null and empty values for the expires attribute, like this:

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);
                }
            }
        });
    }
}

现在你需要注册和放大器;选择这个新的 CookieSpec 在您的HTTP客户端。

Now you need to register & choose this new CookieSpec in your HTTP client.

DefaultHttpClient client = new DefaultHttpClient();
client.getCookieSpecs().register("lenient", new CookieSpecFactory() {
        public CookieSpec newInstance(HttpParams params) {
            return new LenientCookieSpec();
        }
    });
HttpClientParams.setCookiePolicy(client.getParams(), "lenient");

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

Something "like this" could work for you.

这篇关于无效的Cookie头:无法解析属性到期时到期属性为空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆