ice world

There is nothing too difficult if you put your heart into it.
posts - 104, comments - 103, trackbacks - 0, articles - 0

HttpClientUtils

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

    
}



只有注册用户登录后才能发表评论。


网站导航: