506629361 发表于 2017-12-24 17:14:26

org.apache.httpcomponents:httpclient 工具类

import org.apache.http.HttpEntity;  

import org.apache.http.NameValuePair;  

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.HttpGet;  

import org.apache.http.client.methods.HttpPost;  

import org.apache.http.client.methods.HttpRequestBase;  

import org.apache.http.client.utils.URIBuilder;  

import org.apache.http.config.SocketConfig;  

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;  

  
import java.io.IOException;
  
import java.io.UnsupportedEncodingException;
  
import java.net.URISyntaxException;
  
import java.util.ArrayList;
  
import java.util.Map;
  

  
/**
  
* Created by lidada on 2017/6/9.
  
*/

  
public>  
   private static PoolingHttpClientConnectionManager cm;
  
   private static String EMPTY_STR = "";
  
   private static String CONTENT_TYPE_UTF_8 = "UTF-8";
  
   private static String CONTENT_TYPE_GBK = "GBK";
  
   private static String CONTENT_TYPE_JSON = "application/json";
  
   private static final int CONNECTION_TIMEOUT_MS = 60000;
  
   private static final int SO_TIMEOUT_MS = 60000;
  

  
   private static void init() {
  
         if (cm == null) {
  
             cm = new PoolingHttpClientConnectionManager();
  
             cm.setMaxTotal(50);// 整个连接池最大连接数
  
             cm.setDefaultMaxPerRoute(5);// 每路由最大连接数,默认值是2
  
             SocketConfig sc = SocketConfig.custom().setSoTimeout(SO_TIMEOUT_MS).build();
  
             cm.setDefaultSocketConfig(sc);
  
         }
  
   }
  

  
   /**
  
      * 通过连接池获取HttpClient
  
      *
  
      * @return
  
      */
  
   private static CloseableHttpClient getHttpClient() {
  
         init();
  
         return HttpClients.custom().setConnectionManager(cm).setConnectionManagerShared(true) .build();
  
   }
  

  
   public static String httpGetRequest(String url) {
  
         HttpGet httpGet = new HttpGet(url);
  
         return getResult(httpGet);
  
   }
  

  
   public static String httpGetRequest(String url, Map<String, Object> params) throws URISyntaxException {
  
         URIBuilder ub = new URIBuilder();
  
         ub.setPath(url);
  

  
         ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  
         ub.setParameters(pairs);
  

  
         HttpGet httpGet = new HttpGet(ub.build());
  
         return getResult(httpGet);
  
   }
  

  
   public static String httpGetRequest(String url, Map<String, Object> headers, Map<String, Object> params)
  
             throws URISyntaxException {
  
         URIBuilder ub = new URIBuilder();
  
         ub.setPath(url);
  

  
         ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  
         ub.setParameters(pairs);
  

  
         HttpGet httpGet = new HttpGet(ub.build());
  
         for (Map.Entry<String, Object> param : headers.entrySet()) {
  
             httpGet.addHeader(param.getKey(), String.valueOf(param.getValue()));
  
         }
  
         return getResult(httpGet);
  
   }
  

  
   public static String httpPostRequest(String url) {
  
         HttpPost httpPost = new HttpPost(url);
  
         return getResult(httpPost);
  
   }
  

  
   public static String httpPostRequest(String url, Map<String, Object> params) throws UnsupportedEncodingException {
  
         HttpPost httpPost = new HttpPost(url);
  
         ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  
         httpPost.setEntity(new UrlEncodedFormEntity(pairs, CONTENT_TYPE_UTF_8));
  
         return getResult(httpPost);
  
   }
  

  
   public static String httpPostRequest(String url, Map<String, Object> headers, Map<String, Object> params)
  
             throws UnsupportedEncodingException {
  
         HttpPost httpPost = new HttpPost(url);
  

  
         for (Map.Entry<String, Object> param : headers.entrySet()) {
  
             httpPost.addHeader(param.getKey(), String.valueOf(param.getValue()));
  
         }
  

  
         ArrayList<NameValuePair> pairs = covertParams2NVPS(params);
  
         httpPost.setEntity(new UrlEncodedFormEntity(pairs, CONTENT_TYPE_UTF_8));
  

  
         return getResult(httpPost);
  
   }
  

  
   public static String httpPostJSON(String url, String json) throws UnsupportedEncodingException {
  
         HttpPost httpPost = new HttpPost(url);
  
         StringEntity s = new StringEntity(json);
  
         s.setContentEncoding(CONTENT_TYPE_UTF_8);
  
         s.setContentType(CONTENT_TYPE_JSON);// 发送json数据需要设置contentType
  
         httpPost.setEntity(s);
  
         return getResult(httpPost);
  
   }
  

  

  
   private static ArrayList<NameValuePair> covertParams2NVPS(Map<String, Object> params) {
  
         ArrayList<NameValuePair> pairs = new ArrayList<>();
  
         for (Map.Entry<String, Object> param : params.entrySet()) {
  
             pairs.add(new BasicNameValuePair(param.getKey(), String.valueOf(param.getValue())));
  
         }
  

  
         return pairs;
  
   }
  

  
   /**
  
      * 处理Http请求
  
      *
  
      * @param request
  
      * @return
  
      */
  
   private static String getResult(HttpRequestBase request) {
  

  
         RequestConfig.Builder config = RequestConfig.copy(RequestConfig.DEFAULT);
  
         config.setConnectionRequestTimeout(CONNECTION_TIMEOUT_MS);
  
         config.setSocketTimeout(SO_TIMEOUT_MS);
  

  
         request.setConfig(config.build());
  

  
         // CloseableHttpClient httpClient = HttpClients.createDefault();
  
         CloseableHttpClient httpClient = getHttpClient();
  
         CloseableHttpResponse response = null;
  
         try {
  
             response = httpClient.execute(request);
  
             // response.getStatusLine().getStatusCode();
  
             HttpEntity entity = response.getEntity();
  
             if (entity != null) {
  
               // long len = entity.getContentLength();// -1 表示长度未知
  
               return EntityUtils.toString(entity);
  
             }
  
         } catch (IOException e) {
  
             e.printStackTrace();
  
         } finally {
  
             try {
  
               // 释放Socket流
  
               response.close();
  
               // 释放Connection
  
               // httpClient.close();
  
             } catch (IOException e) {
  
               e.printStackTrace();
  
             }
  
         }
  

  
         return EMPTY_STR;
  
   }
  

  
}
页: [1]
查看完整版本: org.apache.httpcomponents:httpclient 工具类