1.利用HttpClient模拟iteye登录
package com.home.action.test.http;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.CookieHandler;
import java.net.CookieManager;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
* 模仿登录iTeye
* @author Li
*/
public class LoginITEye {
private String cookies;
private HttpClient http = new DefaultHttpClient();
private final String USER_AGENT = "Mozilla/5.0";
public static void main(String[] args) throws Exception {
String url = "http://www.iteye.com/login";
String itUrl = "http://www.iteye.com";
LoginITEye iteye = new LoginITEye();
//打开cookie
CookieHandler.setDefault(new CookieManager());
//获取请求登录的页面HTML
String page = iteye.getITEyePageContent(url);
System.out.println(page);
//设置登录参数
List<NameValuePair> params = iteye.tranParams(page, "email","password");
//开始登录
iteye.startLogin(url, params);
String itEyePage = iteye.getITEyePageContent(itUrl);
System.out.println("----------可以从itEyePage打印里面看到welcome欢迎***。表示登录成功.-----------");
System.out.println(itEyePage);
}
/**
* 开始模拟登录
* @param url
* @param params
* @throws IOException
* @throws ClientProtocolException
*/
private void startLogin(String url, List<NameValuePair> params) throws Exception {
HttpPost request = new HttpPost(url);
request.setHeader("Host", "www.iteye.com");
request.setHeader("User-Agent", USER_AGENT);
request.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setHeader("Accept-Language", "zh-CN,zh;q=0.8,en-GB;q=0.6,en;q=0.4,zh-TW;q=0.2");
request.setHeader("Cookie", getCookies());
request.setHeader("Connection", "keep-alive");
request.setHeader("Referer", "http://www.iteye.com/login");
request.setHeader("Content-Type", "application/x-www-form-urlencoded");
request.setEntity(new UrlEncodedFormEntity(params));
HttpResponse response = http.execute(request);
int statusCode = response.getStatusLine().getStatusCode();
//statusCode==200表示请求成功.
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("send paramer: "+ params);
System.out.println("Response Code : " + statusCode);
BufferedReader br = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer();
String line = "";
while((line = br.readLine()) != null) {
sb.append(line);
}
//System.out.println(sb.toString());
}
/**
* 把你的登录账号和密码设置到form里面去
* @param html
* @param name 你的iTeye登录名
* @param word 你的iTeye登录密码
* @return
*/
private List<NameValuePair> tranParams(String html, String name, String word) {
List<NameValuePair> list = new ArrayList<NameValuePair>();
//转化HTML --> document
Document doc = Jsoup.parse(html);
//获取ITEye登录form
Element formEl = doc.getElementById("login_form");
Elements inputs = formEl.getElementsByTag("input");
//解析ITEye登录form里面的登录名和登录密码
for(Element el: inputs) {
String elName = el.attr("name");
String elValue = el.attr("value");
if(elName.equals("name")) {
elValue = name;
}else if(elName.equals("password")) {
elValue = word;
}
if(!elName.equals("button")) {
list.add(new BasicNameValuePair(elName, elValue));
}
}
return list;
}
/**
* 获取iTeye登录页面
* @param url
* @return
* @throws IOException
* @throws ClientProtocolException
*/
private String getITEyePageContent(String url) throws Exception {
StringBuffer result = new StringBuffer();
//设置请求信息
HttpGet request = new HttpGet(url);
request.setHeader("User-Agent", USER_AGENT);
request.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
request.setHeader("Accept-Language", "zh-CN,zh;q=0.8,en-GB;q=0.6,en;q=0.4,zh-TW;q=0.2");
//发送请求
HttpResponse response = http.execute(request);
int statusCode = response.getStatusLine().getStatusCode();
//statusCode==200表示请求成功.
System.out.println("\nSending 'GET' request to URL : " + url);
System.out.println("Response Code : " + statusCode);
//读取返回内容解析成字符串
BufferedReader br = new BufferedReader(
new InputStreamReader(response.getEntity().getContent()));
String line = "";
while((line = br.readLine()) != null) {
result.append(line);
}
//设置cookie
setCookies(response.getFirstHeader("Set-Cookie") == null ? "":
response.getFirstHeader("Set-Cookie").toString());
return result.toString();
}
/**
* @return the cookid
*/
public String getCookies() {
return cookies;
}
/**
* @param cookid the cookid to set
*/
public void setCookies(String cookies) {
this.cookies = cookies;
}
}