HttpClientUtil

/************************************************************************
日 期:
作 者:
版 本:
描 述: 
历 史:
************************************************************************/
package com.jetsen.util;

import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

/**
 * @author yl
 *
 */
public class HttpClientUtil
{

    private static PoolingHttpClientConnectionManager connMgr;
    private static RequestConfig requestConfig;
    private static final int MAX_TIMEOUT = 7000;

    static
    {
        // 设置连接池  
        connMgr = new PoolingHttpClientConnectionManager();
        // 设置连接池大小  
        connMgr.setMaxTotal(100);
        connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());

        RequestConfig.Builder configBuilder = RequestConfig.custom();
        // 设置连接超时  
        configBuilder.setConnectTimeout(MAX_TIMEOUT);
        // 设置读取超时  
        configBuilder.setSocketTimeout(MAX_TIMEOUT);
        // 设置从连接池获取连接实例的超时  
        configBuilder.setConnectionRequestTimeout(MAX_TIMEOUT);
        requestConfig = configBuilder.build();
    }

    /** 
     * 发送 GET 请求(HTTP),不带输入数据 
     * @param url 
     * @return 
     */
    public static HttpRespEntity doGet(String url)
    {
        return doGet(url, new HashMap<String, Object>());
    }

    /** 
     * 发送 GET 请求(HTTP),K-V形式 
     * @param url 
     * @param params 
     * @return 
     */
    public static HttpRespEntity doGet(String url, Map<String, Object> params)
    {
        HttpRespEntity resp = null;

        String apiUrl = url;
        StringBuffer param = new StringBuffer();
        int i = 0;
        for (String key : params.keySet())
        {
            if (i == 0)
                param.append("?");
            else
                param.append("&");
            param.append(key).append("=").append(params.get(key));
            i++;
        }
        apiUrl += param;

        HttpClient httpclient = HttpClients.createDefault();
        try
        {
            HttpGet httpPost = new HttpGet(apiUrl);
            HttpResponse response = httpclient.execute(httpPost);
            int statusCode = response.getStatusLine().getStatusCode();
            resp = new HttpRespEntity();
            resp.statusCode = statusCode;
            resp.headers = response.getAllHeaders();
            System.out.println("执行状态码 : " + statusCode);

            HttpEntity entity = response.getEntity();
            if (entity != null)
            {
                InputStream instream = entity.getContent();
                resp.result = IOUtils.toString(instream, "UTF-8");
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return resp;
    }

    /** 
     * 发送 POST 请求(HTTP),不带输入数据 
     * @param apiUrl 
     * @return 
     */
    public static HttpRespEntity doPost(String apiUrl)
    {
        return doPost(apiUrl, new HashMap<String, Object>());
    }

    /** 
     * 发送 POST 请求(HTTP),K-V形式 
     * @param apiUrl API接口URL 
     * @param params 参数map 
     * @return 
     */
    public static HttpRespEntity doPost(String apiUrl, Map<String, Object> params)
    {
        HttpRespEntity resp = null;
        CloseableHttpClient httpClient = HttpClients.createDefault();

        HttpPost httpPost = new HttpPost(apiUrl);
        CloseableHttpResponse response = null;

        try
        {
            httpPost.setConfig(requestConfig);
            List<NameValuePair> pairList = new ArrayList<NameValuePair>(params.size());
            for (Map.Entry<String, Object> entry : params.entrySet())
            {
                NameValuePair pair = new BasicNameValuePair(entry.getKey(), entry.getValue().toString());
                pairList.add(pair);
            }
            httpPost.setEntity(new UrlEncodedFormEntity(pairList, Charset.forName("UTF-8")));
            response = httpClient.execute(httpPost);

            resp = new HttpRespEntity();
            resp.statusCode = response.getStatusLine().getStatusCode();
            resp.headers = response.getAllHeaders();

            System.out.println(response.toString());
            HttpEntity entity = response.getEntity();
            resp.result = EntityUtils.toString(entity, "UTF-8");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (response != null)
            {
                try
                {
                    EntityUtils.consume(response.getEntity());
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
        return resp;
    }

    /** 
     * 发送 POST 请求(HTTP),JSON形式 
     * @param apiUrl 
     * @param json json对象 
     * @return 
     */
    public static HttpRespEntity doPost(String apiUrl, Object json)
    {
        HttpRespEntity resp = null;
        CloseableHttpClient httpClient = HttpClients.createDefault();

        HttpPost httpPost = new HttpPost(apiUrl);
        CloseableHttpResponse response = null;

        try
        {
            httpPost.setConfig(requestConfig);
            StringEntity stringEntity = new StringEntity(json.toString(), "UTF-8");//解决中文乱码问题  
            stringEntity.setContentEncoding("UTF-8");
            stringEntity.setContentType("application/json");
            httpPost.setEntity(stringEntity);
            response = httpClient.execute(httpPost);

            resp = new HttpRespEntity();
            resp.statusCode = response.getStatusLine().getStatusCode();
            resp.headers = response.getAllHeaders();

            HttpEntity entity = response.getEntity();
            System.out.println(response.getStatusLine().getStatusCode());
            resp.result = EntityUtils.toString(entity, "UTF-8");
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        finally
        {
            if (response != null)
            {
                try
                {
                    EntityUtils.consume(response.getEntity());
                }
                catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
        return resp;
    }

    /** 
     * 发送 DELETE 请求(HTTP) 
     * @param url 
     * @param params 
     * @return 
     */
    public static HttpRespEntity doDelete(String url)
    {
        HttpRespEntity resp = null;
        String apiUrl = url;
        HttpClient httpclient = HttpClients.createDefault();
        try
        {
            HttpDelete httpDel = new HttpDelete(apiUrl);
            HttpResponse response = httpclient.execute(httpDel);
            resp = new HttpRespEntity();
            resp.statusCode = response.getStatusLine().getStatusCode();
            resp.headers = response.getAllHeaders();

            HttpEntity entity = response.getEntity();
            if (entity != null)
            {
                InputStream instream = entity.getContent();
                resp.result = IOUtils.toString(instream, "UTF-8");
            }
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return resp;
    }

    /** 
     * 测试方法 
     * @param args 
     */
    public static void main(String[] args) throws Exception
    {

    }
}

  

posted @ 2016-10-19 11:07  许仙来了  阅读(215)  评论(0编辑  收藏  举报