无效的Cookie头:无法解析属性到期时到期属性为空 [英] Invalid cookie header : Unable to parse expires attribute when expires attribute is empty
问题描述
在一个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屋!