用httpclient模拟浏览器,登录新浪微博

用httpclient模拟浏览器,登录新浪微博

①用Fiddler2追踪登录时的post请求,发现需要以下参数:

check

uname

backURL

autoLogin

pwd

其中,backURL="/",check=“1”,autoLogin可默认为1

于是,只剩 uname和 pwd

②创建一个HttpClient

private  DefaultHttpClient httpclient  =   new  DefaultHttpClient();

③创建一个 HttpPost

HttpPost httpost  =   new  HttpPost(CommonConst.loginUrl);

④伪装httpost,骗过服务器

     /**
     * pretend to be a browser quietly
     
*/
    
private   void  setPostHeader(HttpPost post) {
        post.setHeader(CommonConst.UserAgent, CommonConst.HttpAgent);
        post.setHeader(
" Origin " , CommonConst.weiboUrl);
        post.setHeader(
" Cache-Control " " max-age=0 " );
        post.setHeader(
" Accept " ,
                
" text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 " );
        post.setHeader(
" Accept-Encoding " " gzip,deflate,sdch " );
        post.setHeader(
" Accept-Language " " en-US,en;q=0.8 " );
        post.setHeader(
" Accept-Charset " " ISO-8859-1,utf-8;q=0.7,*;q=0.3 " );
        post.setHeader(
" Accept-Encoding " " gzip,deflate,sdch " );
        post.setHeader(
" Referer " , CommonConst.loginUrl);
    }

 ⑤创建NameValuePair

List < BasicNameValuePair >  nvps  =   new  ArrayList < BasicNameValuePair > ();
        nvps.add(
new  BasicNameValuePair( " check " this .check));
        nvps.add(
new  BasicNameValuePair( " uname " this .uname));
        nvps.add(
new  BasicNameValuePair( " backURL " this .backURL));
        nvps.add(
new  BasicNameValuePair( " autoLogin " this .autoLogin));
        nvps.add(
new  BasicNameValuePair( " pwd " this .pwd));

⑥用setEntity方法,给httpost设置相关参数

httpost.setEntity( new  UrlEncodedFormEntity(nvps, HTTP.UTF_8));

⑦向相应的host上提交post请求

HttpHost targetHost  =   new  HttpHost(CommonConst.host);
            response 
=  httpclient.execute(targetHost, httpost);


login代码:

private   boolean  login() {
        
//  httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);
        HttpPost httpost  =   new  HttpPost(CommonConst.loginUrl);
        setPostHeader(httpost);
        
//  All the parameters post to the web site
        List < BasicNameValuePair >  nvps  =   new  ArrayList < BasicNameValuePair > ();
        nvps.add(
new  BasicNameValuePair( " check " this .check));
        nvps.add(
new  BasicNameValuePair( " uname " this .uname));
        nvps.add(
new  BasicNameValuePair( " backURL " this .backURL));
        nvps.add(
new  BasicNameValuePair( " autoLogin " this .autoLogin));
        nvps.add(
new  BasicNameValuePair( " pwd " this .pwd));

        
try  {
            httpost.setEntity(
new  UrlEncodedFormEntity(nvps, HTTP.UTF_8));
            HttpHost targetHost 
=   new  HttpHost(CommonConst.host);
            response 
=  httpclient.execute(targetHost, httpost);
        } 
catch  (Exception e) {
            e.printStackTrace();
            
return   false ;
        } 
finally  {
            httpost.abort();
        }
        
return   true ;
    }


附CommonConst.java

package  com.yinger;

public   class  CommonConst {
    
public   static  String HttpAgent  =   " Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.46 Safari/536.5 " ;
    
public   static  String loginUrl  =   " http://m.weibo.cn/login " ;
    
public   static  String host  =   " m.weibo.cn " ;
    
public   static  String weiboUrl  =   " http://m.weibo.cn " ;
    
public   static  String UserAgent  =   " User-Agent " ;
}



你可能感兴趣的:(用httpclient模拟浏览器,登录新浪微博)