java封装httpClient工具(支持http和https,包含get和post请求)

来源:互联网 发布:南风知我意林如斯txt 编辑:程序博客网 时间:2024/05/21 09:19

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

maven导入的jar包有:

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.5</version></dependency><!--阿里 FastJson依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.37</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpasyncclient</artifactId></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId></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 PoolingHttpClientConnectionManagerconnMgr;private static RequestConfigrequestConfig;private static final intMAX_TIMEOUT= 7000;private static final Loggerlogger= LoggerFactory.getLogger(HttpsUtils.class);static {// 设置连接池connMgr = new PoolingHttpClientConnectionManager();// 设置连接池大小connMgr.setMaxTotal(100);connMgr.setDefaultMaxPerRoute(connMgr.getMaxTotal());// Validate connections after 1 sec of inactivityconnMgr.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<String, Object>());}/** * 发送 GET 请求(HTTP),K-V形式 *  * @param url * @param params * @return */public static JSONObject doGet(String url, Map<String, Object> params) {String apiUrl = url;StringBuffer param = new StringBuffer();int i = 0;for (String key : params.keySet()) {if (i == 0)param.append("?");elseparam.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<String, Object>());}/** * 发送 POST 请求,K-V形式 *  * @param apiUrl *            API接口URL * @param params *            参数map * @return */public static JSONObject doPost(String apiUrl, Map<String, Object> 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<NameValuePair> pairList = new ArrayList<>(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);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() {@Overridepublic boolean verify(String arg0, SSLSession arg1) {return true;}});} catch (GeneralSecurityException e) {LoggerUtils.error(logger, e, e.getMessage());throw new ServiceException(e.getMessage());}return sslsf;}}



阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 教资笔试 java笔试题 java笔试 雅思笔试 笔试题 银行笔试 建行笔试 遴选笔试 笔试准考证 2019国考笔试时间 教资笔试时间 执业医师笔试时间 学生会笔试试题及答案 学生会笔试题目 银行笔试裸考能过吗 事业单位笔试70分难吗 学生会笔试考什么 教师资格证笔试成绩 执业医师笔试 国考笔试分数线 雅思笔试时间 建行笔试通过率 公务员笔试考什么 2020国考笔试时间 银行笔试裸考 笔试考试时间 公务员笔试多少分能进面试 雅思笔试流程 教师资格证笔试多少分能过 2019执业医师笔试时间 医学考试综合笔试分数查询 2019年执业医师笔试时间 2019上半年教师资格证笔试真题 异界御美邪仙 笔调 定香亭笔谈 修仙笔谈 笔谈 梦溪笔谈作者是谁 霍格沃兹生活指南 梦说笔谈 笔趣岛 笔趣