最近在写一个新浪微博爬虫,由于新浪微博的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进行的空操作,避免了这些这个问题...