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

importjava.io.IOException;importjava.io.InputStream;importjava.nio.charset.Charset;importjava.security.GeneralSecurityException;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.net.ssl.HostnameVerifier;importjavax.net.ssl.SSLContext;importjavax.net.ssl.SSLSession;importorg.apache.commons.io.IOUtils;importorg.apache.http.HttpEntity;importorg.apache.http.HttpResponse;importorg.apache.http.NameValuePair;importorg.apache.http.client.HttpClient;importorg.apache.http.client.config.RequestConfig;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpGet;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;importorg.apache.http.conn.ssl.TrustStrategy;importorg.apache.http.entity.StringEntity;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.impl.conn.PoolingHttpClientConnectionManager;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.ssl.SSLContextBuilder;importorg.apache.http.util.EntityUtils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONObject;import com.core.ServiceException; //自定义的一个异常类。

public classHttpsUtils {private staticPoolingHttpClientConnectionManager connMgr;private staticRequestConfig requestConfig;private static final int MAX_TIMEOUT = 7000;private static final Logger logger = LoggerFactory.getLogger(HttpsUtils.class);static{//设置连接池

connMgr = newPoolingHttpClientConnectionManager();//设置连接池大小

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),不带输入数据

*

*@paramurl

*@return

*/

public staticJSONObject doGet(String url) {return doGet(url, new HashMap());

}/*** 发送 GET 请求(HTTP),K-V形式

*

*@paramurl

*@paramparams

*@return

*/

public static JSONObject doGet(String url, Mapparams) {

String apiUrl=url;

StringBuffer param= newStringBuffer();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= newHttpGet(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 newServiceException(e.getMessage());

}returnJSON.parseObject(result);

}/*** 发送 POST 请求(HTTP),不带输入数据

*

*@paramapiUrl

*@return

*/

public staticJSONObject doPost(String apiUrl) {return doPost(apiUrl, new HashMap());

}/*** 发送 POST 请求,K-V形式

*

*@paramapiUrl

* API接口URL

*@paramparams

* 参数map

*@return

*/

public static JSONObject doPost(String apiUrl, Mapparams) {

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= newHttpPost(apiUrl);

CloseableHttpResponse response= null;try{

httpPost.setConfig(requestConfig);

List pairList = new ArrayList<>(params.size());for (Map.Entryentry : params.entrySet()) {

NameValuePair pair= newBasicNameValuePair(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 newServiceException(e.getMessage());

}finally{if (response != null) {try{

EntityUtils.consume(response.getEntity());

}catch(IOException e) {

LoggerUtils.error(logger, e, e.getMessage());throw newServiceException(e.getMessage());

}

}

}returnJSON.parseObject(httpStr);

}/*** 发送 POST 请求,JSON形式

*

*@paramapiUrl

*@paramjson

* json对象

*@return

*/

public staticJSONObject 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= newHttpPost(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 newServiceException(e.getMessage());

}finally{if (response != null) {try{

EntityUtils.consume(response.getEntity());

}catch(IOException e) {

LoggerUtils.error(logger, e, e.getMessage());throw newServiceException(e.getMessage());

}

}

}returnJSON.parseObject(httpStr);

}/*** 创建SSL安全连接

*

*@return

*/

private staticSSLConnectionSocketFactory createSSLConnSocketFactory() {

SSLConnectionSocketFactory sslsf= null;try{

SSLContext sslContext= new SSLContextBuilder().loadTrustMaterial(null, newTrustStrategy() {public boolean isTrusted(X509Certificate[] chain, String authType) throwsCertificateException {return true;

}

}).build();

sslsf= new SSLConnectionSocketFactory(sslContext, newHostnameVerifier() {

@Overridepublic booleanverify(String arg0, SSLSession arg1) {return true;

}

});

}catch(GeneralSecurityException e) {

LoggerUtils.error(logger, e, e.getMessage());throw newServiceException(e.getMessage());

}returnsslsf;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值