|
Posted on 2013-07-27 11:53 IceWee 阅读(1433) 评论(0) 编辑 收藏 所属分类: Java
备用。 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
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.conn.params.ConnRoutePNames;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

 /** *//**
* <p>
* HTTP请求工具类
* </p>
*
* @author IceWee
* @date 2012-6-16
* @version 1.0
*/
 public class HttpClientUtils {
private static final String NEXT_LINE = "\r\n";
private static final String HEADER_USER_AGENT = "User-Agent"; // 浏览器信息
private static final String BROWSER_IE9 = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"; // 模拟Win7 x64/IE9

 /** *//**
* <p>
* 网站登录(Post方式)
* </p>
*
* @param url 登录请求URL
* @param proxyHost 网络代理主机
* @param proxyPort 网络代理端口
* @param nvps POST参数列表
* @return 用户会话信息
*/
 public static List<Cookie> loginPost(String url, String proxyHost, int proxyPort, List <NameValuePair> nvps) {
List<Cookie> cookies = new ArrayList<Cookie>();
DefaultHttpClient httpClient = new DefaultHttpClient();
 try {
 if (proxyHost != null && !"".equals(proxyHost)) { // 网络代理
HttpHost proxy = new HttpHost(proxyHost, proxyPort);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader(HEADER_USER_AGENT, BROWSER_IE9); // 模拟浏览器
httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
httpClient.execute(httpPost);
cookies = httpClient.getCookieStore().getCookies();
 } catch (Exception e) {
e.printStackTrace();
 } finally {
httpClient.getConnectionManager().shutdown();
}
return cookies;
}
 /** *//**
* 网站登录(Get方式)
*
* @param url 登录URL
* @param encode 网站页面编码
* @param proxyHost 网络代理主机
* @param proxyPort 网络代理端口
* @return Cookie
*/
 public static List<Cookie> loginGet(String url, String encode, String proxyHost, int proxyPort) {
List<Cookie> cookies = null;
DefaultHttpClient httpClient = new DefaultHttpClient();
 try {
 if (proxyHost != null && !"".equals(proxyHost)) { // 网络代理
HttpHost proxy = new HttpHost(proxyHost, proxyPort);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader(HEADER_USER_AGENT, BROWSER_IE9); // 模拟浏览器
HttpResponse response = httpClient.execute(httpGet);
boolean succeed = getLoginResult(response, encode);
 if (succeed) {
cookies = httpClient.getCookieStore().getCookies();
 } else {
cookies = null;
}
 } catch (Exception e) {
e.printStackTrace();
cookies = null;
 } finally {
httpClient.getConnectionManager().shutdown();
}
return cookies;
}
 /** *//**
* <p>
* 网站注销(Get方式)
* </p>
*
* @param url 注销请求URL
* @param proxyHost 网络代理主机
* @param proxyPort 网络代理端口
* @param cookies 用户会话信息
*/
 public static void logout(String url, String proxyHost, int proxyPort, List<Cookie> cookies) {
DefaultHttpClient httpClient = new DefaultHttpClient();
 try {
sendCookie(httpClient, cookies);
 if (proxyHost != null && !"".equals(proxyHost)) { // 网络代理
HttpHost proxy = new HttpHost(proxyHost, proxyPort);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
HttpGet httpGet = new HttpGet(url);
httpGet.setHeader(HEADER_USER_AGENT, BROWSER_IE9); // 模拟浏览器
httpClient.execute(httpGet);
 } catch (Exception e) {
e.printStackTrace();
 } finally {
httpClient.getConnectionManager().shutdown();
}
}
 /** *//**
* <p>
* POST请求网址
* </p>
*
* @param url 请求URL
* @param proxyHost 网络代理主机
* @param proxyPort 网络代理端口
* @param encode 网站编码
* @param nvps 请求参数列表
* @param cookies 用户会话信息
* @return 网站源码
*/
 public static String sendPostRequest(String url, String proxyHost, int proxyPort, String encode, List <NameValuePair> nvps, List<Cookie> cookies) {
String responseText = "";
DefaultHttpClient httpClient = new DefaultHttpClient();
 try {
sendCookie(httpClient, cookies); // 发送Cookie
 if (proxyHost != null && !"".equals(proxyHost)) { // 网络代理
HttpHost proxy = new HttpHost(proxyHost, proxyPort);
httpClient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
}
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader(HEADER_USER_AGENT, BROWSER_IE9); // 模拟浏览器
httpPost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
responseText = getResponse(entity, encode); // 获取返回页面源码
EntityUtils.consume(entity);
 } catch (Exception e) {
e.printStackTrace();
 } finally {
httpClient.getConnectionManager().shutdown();
}
return responseText;
}
 /** *//**
* <p>
* 解析返回流生成文本
* </p>
*
* @param entity
* @param encode
* @return
* @throws IOException
*/
 private static String getResponse(HttpEntity entity, String encode) throws IOException {
StringBuffer buffer = new StringBuffer();
InputStream in = entity.getContent();
Reader reader = new InputStreamReader(in, encode);
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
 while ((line = bufferedReader.readLine()) != null) {
line = new String(line.getBytes());
buffer.append(line).append(NEXT_LINE);
}
bufferedReader.close();
reader.close();
return buffer.toString();
}
 /** *//**
* <p>
* 发送Cookie
* </p>
*
* @param httpClient
* @param cookies
*/
 private static void sendCookie(DefaultHttpClient httpClient, List<Cookie> cookies) {
 if (cookies != null) {
 for (Cookie cookie : cookies) {
httpClient.getCookieStore().addCookie(cookie);
}
}
}
 /** *//**
* <p>
* 解析出登录结果,北大法宝登录成功失败分别返回如下信息:<br>
* 成功:p_LoginUser = "elsevier";dispResult('');<br>
* 失败:p_AlertInfo = "对不起,您的账号在“法律法规”库在线人数已经超过最大允许范围!如有任何疑问请致电400-810-8266转117";dispResult('');
* </p>
*
* @param response
* @param encode
* @return
* @throws IOException
*/
 private static boolean getLoginResult(HttpResponse response, String encode) throws IOException {
boolean result = false;
HttpEntity entity = response.getEntity();
String responseText = getResponse(entity, encode);
EntityUtils.consume(entity);
 if (responseText != null) {
 if (responseText.contains("p_LoginUser")) {
result = true;
 } else if (responseText.contains("p_AlertInfo")) {
result = false;
}
 } else {
result = false;
}
return result;
}
}

|