新浪模擬登陸 HttpClient 4 cookie rejected 問題


  最近在寫一個新浪微博爬蟲,由於新浪微博的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、度娘了多遍,無非都是用

View Code
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

View Code
 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進行的空操作,避免了這些這個問題...

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM