Mic*_*ant 8 java apache cookies android httpclient
在Android应用程序中,当DefaultHttpClient用于获取URL内容(执行HttpGet)时,我在日志中收到以下警告:
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:
Run Code Online (Sandbox Code Playgroud)
我理解警告,因为该expires字段不包含有效的日期格式.我理解这可能是因为它是一个'会话cookie'(没有专家).关于Curl上下文中类似情况的线程
在网上搜索我发现主要是
.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH (or other) )
Run Code Online (Sandbox Code Playgroud)
通过正确解析包含逗号的日期来避免警告的选项.
但是,我想避免该日志.(不是通过禁用日志)我相信内部一切都很好,因为"I GUESS",cookie.setExpiryDate()根本就没有被调用.
您是否认为我需要HTTP客户端的特定配置(我没有设置特定配置)以避免该警告或支持空过期?
谢谢.
如果您不介意更改,CookieSpec您可以提供自己的、更宽松的子类。
首先,创建一个 lenientCookieSpec来接受null该expires属性的值并为空,如下所示:
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);
}
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
现在您需要CookieSpec在 HTTP 客户端中注册并选择这个新的。
DefaultHttpClient client = new DefaultHttpClient();
client.getCookieSpecs().register("lenient", new CookieSpecFactory() {
public CookieSpec newInstance(HttpParams params) {
return new LenientCookieSpec();
}
});
HttpClientParams.setCookiePolicy(client.getParams(), "lenient");
Run Code Online (Sandbox Code Playgroud)
“像这样”的东西可能对你有用。
| 归档时间: |
|
| 查看次数: |
16203 次 |
| 最近记录: |