/*** Copyright (c) 2013-Nowhttp://jeesite.comAll rights reserved.*/
packagecom.jeesite.common.web.http;importjava.io.IOException;importjava.io.UnsupportedEncodingException;importjava.security.GeneralSecurityException;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjava.util.ArrayList;importjava.util.List;importjava.util.Map;importjavax.net.ssl.HostnameVerifier;importjavax.net.ssl.SSLContext;importjavax.net.ssl.SSLSession;importorg.apache.http.HttpEntity;importorg.apache.http.NameValuePair;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.client.methods.HttpUriRequest;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.message.BasicNameValuePair;importorg.apache.http.ssl.SSLContextBuilder;importorg.apache.http.util.EntityUtils;/*** HTTP客户端工具类(支持HTTPS)
*@authorAustin Ding
*@version2018-3-27*/
public classHttpClientUtils {/*** http的get请求
*@paramurl*/
public staticString get(String url) {return get(url, "UTF-8");
}/*** http的get请求
*@paramurl*/
public staticString get(String url, String charset) {
HttpGet httpGet= newHttpGet(url);returnexecuteRequest(httpGet, charset);
}/*** http的get请求,增加异步请求头参数
*@paramurl*/
public staticString ajaxGet(String url) {return ajaxGet(url, "UTF-8");
}/*** http的get请求,增加异步请求头参数
*@paramurl*/
public staticString ajaxGet(String url, String charset) {
HttpGet httpGet= newHttpGet(url);
httpGet.setHeader("X-Requested-With", "XMLHttpRequest");returnexecuteRequest(httpGet, charset);
}/*** http的post请求,传递map格式参数*/
public static String post(String url, MapdataMap) {return post(url, dataMap, "UTF-8");
}/*** http的post请求,传递map格式参数*/
public static String post(String url, MapdataMap, String charset) {
HttpPost httpPost= newHttpPost(url);try{if (dataMap != null){
List nvps = new ArrayList();for (Map.Entryentry : dataMap.entrySet()) {
nvps.add(newBasicNameValuePair(entry.getKey(), entry.getValue()));
}
UrlEncodedFormEntity formEntity= newUrlEncodedFormEntity(nvps, charset);
formEntity.setContentEncoding(charset);
httpPost.setEntity(formEntity);
}
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}returnexecuteRequest(httpPost, charset);
}/*** http的post请求,增加异步请求头参数,传递map格式参数*/
public static String ajaxPost(String url, MapdataMap) {return ajaxPost(url, dataMap, "UTF-8");
}/*** http的post请求,增加异步请求头参数,传递map格式参数*/
public static String ajaxPost(String url, MapdataMap, String charset) {
HttpPost httpPost= newHttpPost(url);
httpPost.setHeader("X-Requested-With", "XMLHttpRequest");try{if (dataMap != null){
List nvps = new ArrayList();for (Map.Entryentry : dataMap.entrySet()) {
nvps.add(newBasicNameValuePair(entry.getKey(), entry.getValue()));
}
UrlEncodedFormEntity formEntity= newUrlEncodedFormEntity(nvps, charset);
formEntity.setContentEncoding(charset);
httpPost.setEntity(formEntity);
}
}catch(UnsupportedEncodingException e) {
e.printStackTrace();
}returnexecuteRequest(httpPost, charset);
}/*** http的post请求,增加异步请求头参数,传递json格式参数*/
public staticString ajaxPostJson(String url, String jsonString) {return ajaxPostJson(url, jsonString, "UTF-8");
}/*** http的post请求,增加异步请求头参数,传递json格式参数*/
public staticString ajaxPostJson(String url, String jsonString, String charset) {
HttpPost httpPost= newHttpPost(url);
httpPost.setHeader("X-Requested-With", "XMLHttpRequest");//try {
StringEntity stringEntity = new StringEntity(jsonString, charset);//解决中文乱码问题
stringEntity.setContentEncoding(charset);
stringEntity.setContentType("application/json");
httpPost.setEntity(stringEntity);//} catch (UnsupportedEncodingException e) {//e.printStackTrace();//}
returnexecuteRequest(httpPost, charset);
}/*** 执行一个http请求,传递HttpGet或HttpPost参数*/
public staticString executeRequest(HttpUriRequest httpRequest) {return executeRequest(httpRequest, "UTF-8");
}/*** 执行一个http请求,传递HttpGet或HttpPost参数*/
public staticString executeRequest(HttpUriRequest httpRequest, String charset) {
CloseableHttpClient httpclient;if ("https".equals(httpRequest.getURI().getScheme())){
httpclient=createSSLInsecureClient();
}else{
httpclient=HttpClients.createDefault();
}
String result= "";try{try{
CloseableHttpResponse response=httpclient.execute(httpRequest);
HttpEntity entity= null;try{
entity=response.getEntity();
result=EntityUtils.toString(entity, charset);
}finally{
EntityUtils.consume(entity);
response.close();
}
}finally{
httpclient.close();
}
}catch(IOException ex){
ex.printStackTrace();
}returnresult;
}/*** 创建 SSL连接*/
public staticCloseableHttpClient createSSLInsecureClient() {try{
SSLContext sslContext= new SSLContextBuilder().loadTrustMaterial(newTrustStrategy() {
@Overridepublic boolean isTrusted(X509Certificate[] chain, String authType) throwsCertificateException {return true;
}
}).build();
SSLConnectionSocketFactory sslsf= new SSLConnectionSocketFactory(sslContext, newHostnameVerifier() {
@Overridepublic booleanverify(String hostname, SSLSession session) {return true;
}
});returnHttpClients.custom().setSSLSocketFactory(sslsf).build();
}catch(GeneralSecurityException ex) {throw newRuntimeException(ex);
}
}
}