用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);
}
* 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));
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);
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 ;
}
// 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 " ;
}
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 " ;
}