|
Posted on 2013-07-27 11:53 IceWee 閱讀(1438) 評論(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>
* 網(wǎng)站登錄(Post方式)
* </p>
*
* @param url 登錄請求URL
* @param proxyHost 網(wǎng)絡(luò)代理主機
* @param proxyPort 網(wǎng)絡(luò)代理端口
* @param nvps POST參數(shù)列表
* @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)) { // 網(wǎng)絡(luò)代理
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;
}
 /** *//**
* 網(wǎng)站登錄(Get方式)
*
* @param url 登錄URL
* @param encode 網(wǎng)站頁面編碼
* @param proxyHost 網(wǎng)絡(luò)代理主機
* @param proxyPort 網(wǎng)絡(luò)代理端口
* @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)) { // 網(wǎng)絡(luò)代理
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>
* 網(wǎng)站注銷(Get方式)
* </p>
*
* @param url 注銷請求URL
* @param proxyHost 網(wǎng)絡(luò)代理主機
* @param proxyPort 網(wǎng)絡(luò)代理端口
* @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)) { // 網(wǎng)絡(luò)代理
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請求網(wǎng)址
* </p>
*
* @param url 請求URL
* @param proxyHost 網(wǎng)絡(luò)代理主機
* @param proxyPort 網(wǎng)絡(luò)代理端口
* @param encode 網(wǎng)站編碼
* @param nvps 請求參數(shù)列表
* @param cookies 用戶會話信息
* @return 網(wǎng)站源碼
*/
 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); // 發(fā)送Cookie
 if (proxyHost != null && !"".equals(proxyHost)) { // 網(wǎng)絡(luò)代理
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>
* 發(fā)送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>
* 解析出登錄結(jié)果,北大法寶登錄成功失敗分別返回如下信息:<br>
* 成功:p_LoginUser = "elsevier";dispResult('');<br>
* 失敗:p_AlertInfo = "對不起,您的賬號在“法律法規(guī)”庫在線人數(shù)已經(jīng)超過最大允許范圍!如有任何疑問請致電400-810-8266轉(zhuǎn)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;
}
}

|