最近在寫一個新浪微博爬蟲,由於新浪微博的post用戶名密碼是用RSA加密,看了IT雜男記中的用rsa加密模擬登陸http://marspring.mobi/http-client-weibo/,似乎解決了
登陸問題,成功登陸了,但是HttpClient 一直報WARN:
Cookie rejected: "[version: 0][name: U_TRS2][value: 00000
0be.116527ba.51510ea5.8f309118][domain: .sina.com.cn][path: /][expiry: null]". Illegal domain attribute "sina.com.cn". D
omain of origin: "weibo.com"
我用的是httpclient-4.2.3.jar,google、度娘了多遍,無非都是用

httpget.getParams().setParameter( ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY); //設置 HttpClient 接收 Cookie,用與瀏覽器一樣的策略
,但我試了在N個時候設置這個參數,都木有解決的辦法,但是也不影響它的登陸,WARN一直報,后面的HttpGet也都可以正確取到(IT雜男記中說HC3直接這樣是無法解決登
陸問題),所以也就沒管了,雖然調試起來比較麻煩,因為一直給你報WARN..
剛剛在官網http://hc.apache.org/httpcomponents-client-ga/看到HttpClient Tutorial中的cookie管理這一章,有段說自定義CookiePolicy

1 CookieSpecFactory csf = new CookieSpecFactory() { 2 public CookieSpec newInstance(HttpParams params) { 3 return new BrowserCompatSpec() { 4 @Override 5 public void validate(Cookie cookie, CookieOrigin origin) 6 throws MalformedCookieException { 7 // Oh, I am easy 8 } 9 }; 10 } 11 }; 12 13 DefaultHttpClient httpclient = new DefaultHttpClient(); 14 httpclient.getCookieSpecs().register("easy", csf); 15 httpclient.getParams().setParameter( 16 ClientPNames.COOKIE_POLICY, "easy");
把這段放到自己代碼中,測試了一下,WARN居然不報了,那問題就解決了..
想了想,問題還是在CookiePolicy這里....網上說的用瀏覽器cookie策略,我覺得需要每個請求對”瀏覽器“策略的cookie進行一系操作,而我構造的http請求無需傳遞cookie值,就導致cookie rejected,自定義的cookie對cookie進行的空操作,避免了這些這個問題...