環境:HttpClient4.0.1
發現在執行httpClient寫的demo時會輸出一個警告(以前沒這個警告出現):
警告: Cookie rejected: "$Version=0; ID=XXXXXX:FG=1;
$Path=/; $Domain=XXXXX". Illegal domain attribute ".XXXXXX".
Domain of origin: "XX.XXX.XXX.XXX"
網上了解了一下,大致是說httpclient的請求默認是需要cookie的,但是默認CookiePolicy.BROWSER_COMPATIBILITY,是RFC2109,cookie ver1,現在RFC2965 定義了cookie的第二個版本,所以要自己設置下
CookiePolicy.postMethod.getParams().setParameter("http.protocol.cookie-policy",CookiePolicy.BROWSER_COMPATIBILITY);
但使用該方法仍然會有該warning輸出。難道是本人采用的httpclient版本問題嗎?
結合HttpClient4.0.1的文檔的第三章,可以通過3.6所提的自定義cookie策略,來消除該warning的輸出。
但該方案只是將validate方法重寫為空方法——對于cookie驗證什么也不做。
// 定制cookie策略
CookieSpecFactory csf = new CookieSpecFactory(){
public CookieSpec newInstance(HttpParams params){
return new BrowserCompatSpec(){
@Override
public void validate(Cookie cookie, CookieOrigin origin)
throws MalformedCookieException{
//Oh, I am easy
}
};
}
};
httpClient.getCookieSpecs().register("easy", csf);
httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY, "easy");
總結:最后只是通過老子“無為”的方式去掉該warning,但對于該異常產生的真正原因仍然不明確。。。