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 { } }