新浪模拟登陆 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进行的空操作,避免了这些这个问题...

  

原文地址:https://www.cnblogs.com/joeman/p/2984490.html