/************************************************************************日 期:作 者:版 本:描 述: 历 史:************************************************************************/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()); } /** * 发送 GET 请求(HTTP),K-V形式 * @param url * @param params * @return */ public static HttpRespEntity doGet(String url, Map 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 ()); } /** * 发送 POST 请求(HTTP),K-V形式 * @param apiUrl API接口URL * @param params 参数map * @return */ public static HttpRespEntity doPost(String apiUrl, Map params) { HttpRespEntity resp = null; CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(apiUrl); CloseableHttpResponse response = null; try { httpPost.setConfig(requestConfig); List pairList = new ArrayList (params.size()); for (Map.Entry 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 { }}