最近在做Android版的博客园客户端,在考虑添加入登录功能,以实现获取更多的信息。
现在测试使用HttpClient进行模拟登陆。
登录页面:http://passport.VEVb.com/login.aspx
登录结果页面:http://home.VEVb.com/、 http://www.VEVb.com/、……
登录的时候要求提供用户名和密码,属性分别是tbUserName 和 tbPassWord;如图所示:
登录成功,转到下一个页面时,需要提供Cookies,还可以设置UA等属性:
具体代码:
1 package com.arlen.login; 2 3 import org.apache.commons.httpclient.Cookie; 4 import org.apache.commons.httpclient.HttpClient; 5 import org.apache.commons.httpclient.NameValuePair; 6 import org.apache.commons.httpclient.cookie.CookiePolicy; 7 import org.apache.commons.httpclient.methods.GetMethod; 8 import org.apache.commons.httpclient.methods.PostMethod; 9 import org.apache.commons.httpclient.params.HttpMethodParams;10 11 public class ImitateLogin {12 13 public static void main(String[] args) {14 String userName = "username";15 String password = "password"16 String loginUrl = "http://passport.VEVb.com/login.aspx";17 String dataUrl = "http://home.VEVb.com/";18 HttpClientLogin(userName, password, loginUrl, dataUrl);19 }20 21 PRivate static void HttpClientLogin(String userName, String password,22 String loginUrl, String dataUrl) {23 HttpClient httpClient = new HttpClient();24 httpClient.getParams().setParameter(25 HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");26 PostMethod postMethod = new PostMethod(loginUrl);27 28 NameValuePair[] postData = { new NameValuePair("tbUserName", userName),29 new NameValuePair("tbPassword", password) };30 postMethod.setRequestBody(postData);31 32 try {33 34 httpClient.getParams().setCookiePolicy(35 CookiePolicy.BROWSER_COMPATIBILITY);36 httpClient.executeMethod(postMethod);37 Cookie[] cookies = httpClient.getState().getCookies();38 StringBuffer stringBuffer = new StringBuffer();39 for (Cookie c : cookies) {40 stringBuffer.append(c.toString() + ";");41 }42 43 GetMethod getMethod = new GetMethod(dataUrl);44 getMethod.setRequestHeader("Cookie", stringBuffer.toString());45 postMethod.setRequestHeader("Host", "passport.VEVb.com");46 postMethod.setRequestHeader("Referer", "http://home.VEVb.com/");47 postMethod.setRequestHeader("User-Agent", "AndroidCnblogs");48 httpClient.executeMethod(getMethod);49 50 String result = getMethod.getResponseBodyAsString();51 System.out.println(result);52 53 } catch (Exception e) {54 e.printStackTrace();55 }56 }57 58 }
新闻热点
疑难解答