|  | 
				
					
	
		
			
 			Posted on 2013-07-27 11:53 IceWee  阅读(1458) 评论(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; 
  } 
   
  } 
  
	    
    
 |