博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java封装httpClient工具(支持http和https,包含get和post请求)
阅读量:6616 次
发布时间:2019-06-25

本文共 9071 字,大约阅读时间需要 30 分钟。

网上有关方法非常多,但相对较零散,有些只支持http或https中的一种,或者只有get或post中的一种。以下对httpclient工具做了比较全面的封装,支持http和https,包含get和post请求。

maven导入的jar包有:

org.apache.commons
commons-lang3
3.5
com.alibaba
fastjson
1.2.37
org.apache.httpcomponents
httpasyncclient
org.apache.httpcomponents
httpmime

<dependency>

<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpasyncclient</artifactId>
<version>4.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.2</version>
</dependency>

<dependency>

<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.10</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>

 

代码:

import java.io.IOException;import java.io.InputStream;import java.nio.charset.Charset;import java.security.GeneralSecurityException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; import javax.net.ssl.HostnameVerifier;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession; 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.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.TrustStrategy;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.ssl.SSLContextBuilder;import org.apache.http.util.EntityUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory; import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject; import com.core.ServiceException;     //自定义的一个异常类。 public class HttpsUtils {    private static PoolingHttpClientConnectionManager    connMgr;    private static RequestConfig                requestConfig;    private static final int                MAX_TIMEOUT    = 7000;     private static final Logger                logger        = LoggerFactory.getLogger(HttpsUtils.class);     static {        // 设置连接池        connMgr = new PoolingHttpClientConnectionManager();        // 设置连接池大小        connMgr.setMaxTotal(100);        connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());        // Validate connections after 1 sec of inactivity        connMgr.setValidateAfterInactivity(1000);        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 JSONObject doGet(String url) {        return doGet(url, new HashMap
()); } /** * 发送 GET 请求(HTTP),K-V形式 * * @param url * @param params * @return */ public static JSONObject doGet(String url, Map
params) { 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; String result = null; HttpClient httpClient = null; if (apiUrl.startsWith("https")) { httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()) .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); } else { httpClient = HttpClients.createDefault(); } try { HttpGet httpGet = new HttpGet(apiUrl); HttpResponse response = httpClient.execute(httpGet); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); result = IOUtils.toString(instream, "UTF-8"); } } catch (IOException e) { LoggerUtils.error(logger, e, e.getMessage()); throw new ServiceException(e.getMessage()); } return JSON.parseObject(result); } /** * 发送 POST 请求(HTTP),不带输入数据 * * @param apiUrl * @return */ public static JSONObject doPost(String apiUrl) { return doPost(apiUrl, new HashMap
()); } /** * 发送 POST 请求,K-V形式 * * @param apiUrl * API接口URL * @param params * 参数map * @return */ public static JSONObject doPost(String apiUrl, Map
params) { CloseableHttpClient httpClient = null; if (apiUrl.startsWith("https")) { httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()) .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); } else { httpClient = HttpClients.createDefault(); } String httpStr = null; 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); HttpEntity entity = response.getEntity(); httpStr = EntityUtils.toString(entity, "UTF-8"); } catch (IOException e) { LoggerUtils.error(logger, e, e.getMessage()); throw new ServiceException(e.getMessage()); } finally { if (response != null) { try { EntityUtils.consume(response.getEntity()); } catch (IOException e) { LoggerUtils.error(logger, e, e.getMessage()); throw new ServiceException(e.getMessage()); } } } return JSON.parseObject(httpStr); } /** * 发送 POST 请求,JSON形式 * * @param apiUrl * @param json * json对象 * @return */ public static JSONObject doPost(String apiUrl, Object json) { CloseableHttpClient httpClient = null; if (apiUrl.startsWith("https")) { httpClient = HttpClients.custom().setSSLSocketFactory(createSSLConnSocketFactory()) .setConnectionManager(connMgr).setDefaultRequestConfig(requestConfig).build(); } else { httpClient = HttpClients.createDefault(); } String httpStr = null; 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); HttpEntity entity = response.getEntity(); httpStr = EntityUtils.toString(entity, "UTF-8"); } catch (IOException e) { LoggerUtils.error(logger, e, e.getMessage()); throw new ServiceException(e.getMessage()); } finally { if (response != null) { try { EntityUtils.consume(response.getEntity()); } catch (IOException e) { LoggerUtils.error(logger, e, e.getMessage()); throw new ServiceException(e.getMessage()); } } } return JSON.parseObject(httpStr); } /** * 创建SSL安全连接 * * @return */ private static SSLConnectionSocketFactory createSSLConnSocketFactory() { SSLConnectionSocketFactory sslsf = null; try { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException { return true; } }).build(); sslsf = new SSLConnectionSocketFactory(sslContext, new HostnameVerifier() { @Override public boolean verify(String arg0, SSLSession arg1) { return true; } }); } catch (GeneralSecurityException e) { LoggerUtils.error(logger, e, e.getMessage()); throw new ServiceException(e.getMessage()); } return sslsf; }}

 

来源  https://blog.csdn.net/xinxiran/article/details/78893986

转载于:https://www.cnblogs.com/myjoan/p/10032983.html

你可能感兴趣的文章
【译】ExtJS 4.1会带来什么
查看>>
重要的话
查看>>
mysql多个TimeStamp设置(转)
查看>>
php中的占位符
查看>>
Strus2学习Exception处理集锦(一)
查看>>
BSS段 data段 text段 堆heap 和 栈stack
查看>>
数据库创建好之后如何创建scott用户
查看>>
EBS销售订单挑库发放处理程序
查看>>
crontab报错
查看>>
docker内存限制
查看>>
动态大小的图片上的超链接
查看>>
总结一下常用的排序,冒泡排序,选择排序,快速排序
查看>>
Sql Server系列:系统函数
查看>>
php5.5 yum源
查看>>
samsungGalaxyS4USB驱动
查看>>
SDN第三次作业
查看>>
java第二次实验作业
查看>>
PHP数据集构建JSON及新数组
查看>>
Android:percent 布局
查看>>
数据库主键
查看>>