package Step1; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; /** * * @ClassName: HttpLogin * @Description: java通過httpclient獲取cookie模擬登錄 * @author zeze * @date 2015年11月10日 下午4:18:08 * */ public class HttpLogin { public static void main(String[] args) { // 登陸 Url String loginUrl = "http://passport.mop.com/?targetUrl=http://hi.mop.com/?&g=1447141423230&loginCheck=UNLOGINED"; // 需登陸后訪問的 Url String dataUrl = "http://hi.mop.com/?"; HttpClient httpClient = new HttpClient(); // 模擬登陸,按實際服務器端要求選用 Post 或 Get 請求方式 PostMethod postMethod = new PostMethod(loginUrl); // 設置登陸時要求的信息,用戶名和密碼 NameValuePair[] data = { new NameValuePair("loginName", "chzeze123"), new NameValuePair("loginPasswd", "**") }; postMethod.setRequestBody(data); try { // 設置 HttpClient 接收 Cookie,用與瀏覽器一樣的策略 httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY); int statusCode=httpClient.executeMethod(postMethod); // 獲得登陸后的 Cookie Cookie[] cookies = httpClient.getState().getCookies(); StringBuffer tmpcookies = new StringBuffer(); for (Cookie c : cookies) { tmpcookies.append(c.toString() + ";"); System.out.println("cookies = "+c.toString()); } if(statusCode==302){//重定向到新的URL System.out.println("模擬登錄成功"); // 進行登陸后的操作 GetMethod getMethod = new GetMethod(dataUrl); // 每次訪問需授權的網址時需帶上前面的 cookie 作為通行證 getMethod.setRequestHeader("cookie", tmpcookies.toString()); // 你還可以通過 PostMethod/GetMethod 設置更多的請求后數據 // 例如,referer 從哪里來的,UA 像搜索引擎都會表名自己是誰,無良搜索引擎除外 postMethod.setRequestHeader("Referer", "http://passport.mop.com/"); postMethod.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36"); httpClient.executeMethod(getMethod); // 打印出返回數據,檢驗一下是否成功 String text = getMethod.getResponseBodyAsString(); System.out.println(text); } else { System.out.println("登錄失敗"); } } catch (Exception e) { e.printStackTrace(); } } }