①用Fiddler2追踪登录时的post请求,发现需要以下参数:
check
uname
backURL
autoLogin
pwd
其中,backURL="/",check=“1”,autoLogin可默认为1
于是,只剩
uname和
pwd
②创建一个HttpClient
privateDefaultHttpClienthttpclient=newDefaultHttpClient();
③创建一个
HttpPost
HttpPosthttpost=newHttpPost(CommonConst.loginUrl);
④伪装httpost,骗过服务器
/***pretendtobeabrowserquietly*/privatevoidsetPostHeader(HttpPostpost){
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
Listnvps=newArrayList();
nvps.add(newBasicNameValuePair("check",this.check));
nvps.add(newBasicNameValuePair("uname",this.uname));
nvps.add(newBasicNameValuePair("backURL",this.backURL));
nvps.add(newBasicNameValuePair("autoLogin",this.autoLogin));
nvps.add(newBasicNameValuePair("pwd",this.pwd));
⑥用setEntity方法,给httpost设置相关参数
httpost.setEntity(newUrlEncodedFormEntity(nvps,HTTP.UTF_8));
⑦向相应的host上提交post请求
HttpHosttargetHost=newHttpHost(CommonConst.host);
response=httpclient.execute(targetHost,httpost);
login代码:
privatebooleanlogin(){//httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,proxy);HttpPosthttpost=newHttpPost(CommonConst.loginUrl);
setPostHeader(httpost);//AlltheparametersposttothewebsiteListnvps=newArrayList();
nvps.add(newBasicNameValuePair("check",this.check));
nvps.add(newBasicNameValuePair("uname",this.uname));
nvps.add(newBasicNameValuePair("backURL",this.backURL));
nvps.add(newBasicNameValuePair("autoLogin",this.autoLogin));
nvps.add(newBasicNameValuePair("pwd",this.pwd));try{
httpost.setEntity(newUrlEncodedFormEntity(nvps,HTTP.UTF_8));
HttpHosttargetHost=newHttpHost(CommonConst.host);
response=httpclient.execute(targetHost,httpost);
}catch(Exceptione){
e.printStackTrace();returnfalse;
}finally{
httpost.abort();
}returntrue;
}
附CommonConst.java
packagecom.yinger;publicclassCommonConst{publicstaticStringHttpAgent="Mozilla/5.0(Macintosh;IntelMacOSX10_7_4)AppleWebKit/536.5(KHTML,likeGecko)Chrome/19.0.1084.46Safari/536.5";publicstaticStringloginUrl="/login";publicstaticStringhost="";publicstaticStringweiboUrl="";publicstaticStringUserAgent="User-Agent";}
posted on -07-11 11:59 Ying-er 阅读(5020) 评论(5) 编辑 收藏