import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
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.client.methods.HttpUriRequest;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class HttpClient4ITEYELogin {
private CloseableHttpClient httpClient = HttpClients.createDefault();
private String getAuthenticity_token(String html) {
Document doc = Jsoup.parse(html);
return doc.select("form#login_form input[name=authenticity_token]")
.attr("value");
}
/**
* 获取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",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0");
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 = httpClient.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(), "utf-8"));
String line = "";
while ((line = br.readLine()) != null) {
result.append(line);
}
//关闭资源
br.close();
return result.toString();
}
/**
* 设置请求头
*
*/
public void setRequestHeader(HttpUriRequest request) {
request.setHeader("Host", "www.iteye.com");
request.setHeader("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0");
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-us;q=0.5,en;q=0.3");
request.setHeader("Accept-Encoding", "gzip, deflate");
request.setHeader("Referer", "http://www.iteye.com/login");
request.setHeader("Connection", "keep-alive");
}
private List<NameValuePair> getParameters(String username, String password)
throws Exception {
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("name", username));
parameters.add(new BasicNameValuePair("password", password));
parameters
.add(new BasicNameValuePair(
"authenticity_token",
getAuthenticity_token(getITEyePageContent("http://www.iteye.com/login"))));
parameters.add(new BasicNameValuePair("remember_me", "1"));
return parameters;
}
public void login(String url, String username, String password)
throws Exception {
HttpPost httpPost = new HttpPost(url);
setRequestHeader(httpPost);
// 设置请求参数
List<NameValuePair> parameters = getParameters(username, password);
HttpEntity httpEntity = new UrlEncodedFormEntity(parameters);
System.out.println("send parameters: " + parameters);
httpPost.setEntity(httpEntity);
HttpResponse response = httpClient.execute(httpPost);
// 状态码
System.out.println("StatesCode:"
+ response.getStatusLine().getStatusCode());
BufferedReader br = new BufferedReader(new InputStreamReader(response
.getEntity().getContent(), "utf-8"));
StringBuffer sb = new StringBuffer();
while (br.ready()) {
sb.append(br.readLine());
}
// 打印HTML
System.out.println(sb.toString());
// 关闭资源
br.close();
}
public static void main(String[] args) throws Exception {
// 打开cookie
HttpClient4ITEYELogin httpClient4ITEYELogin = new HttpClient4ITEYELogin();
httpClient4ITEYELogin.getITEyePageContent("http://www.iteye.com/login");
httpClient4ITEYELogin.login("http://www.iteye.com/login", "your name",
"your password");
//关闭httpClient
String indexHtml = httpClient4ITEYELogin.getITEyePageContent("http://www.iteye.com/");
//看看有没有欢迎xxx登录
System.out.println(indexHtml);
httpClient4ITEYELogin.httpClient.close();
}
}
关键点:首次访问先把authenticity_token取到,这个为input type="hiden"可以通过jsoup取到这个值,这个值会变化,每次关闭浏览器,再重新访问,这个值就会变,没运行一次HttpClient4ITEYELogin这个值也会变
本文介绍了一种使用Java的HttpClient库实现对ITEYE网站登录的方法。通过获取登录所需的authenticity_token并设置必要的HTTP头部信息及参数,实现了自动化的登录过程。
4573

被折叠的 条评论
为什么被折叠?



