您的位置:首页 > 理论基础 > 计算机网络

新浪模拟登陆 HttpClient 4 cookie rejected 问题

2013-05-16 17:03 555 查看
  最近在写一个新浪微博爬虫,由于新浪微博的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进行的空操作,避免了这些这个问题...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: