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
    {

    }
}
相關文章
相關標籤/搜索