一、http封装工具类
-
忽略证书https请求
-
支持rest风格请求与传参
-
支持header请求头封装
-
支持Query与HttpEntity传参
maven依赖
<!--
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.5.9</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.9</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.11</version>
</dependency>
-->
<!--20250827 更新-->
<dependency>
<groupId>com.vansight</groupId>
<artifactId>storm-frog-fw</artifactId>
<version>0.0.40-RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</exclusion>
<exclusion>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-nop</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
</exclusion>
<exclusion>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
</exclusion>
</exclusions>
</dependency>
-
工具类
package com.ruoyi.utils;
package com.acguisition.server.common.utils;
import com.stormfrog.fw.utils.httpclient.HTTPSClientUtil;
import com.stormfrog.fw.utils.httpclient.HTTPSTrustClient;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.MapUtils;
import org.apache.http.*;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
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.ssl.SSLContextBuilder;
import org.apache.http.ssl.TrustStrategy;
import org.springframework.util.StringUtils;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
/**
* @version 1.0
* @description HTTP/HTTPS 请求工具类
* @date 2025.08.27
* @author CHENYB
*/
@Slf4j
public class HttpUtil {
private static final String HTTP = "http";
private static final String HTTPS = "https";
private static SSLConnectionSocketFactory sslConnectionSocketFactory = null;
private static PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = null;//连接池管理类
private static SSLContextBuilder sslContextBuilder = null;//管理Https连接的上下文类
/**
* 证书忽略部分
*/
static {
try {
sslContextBuilder = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
@Override
public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
// 信任所有站点 直接返回true
return true;
}
});
sslConnectionSocketFactory = new SSLConnectionSocketFactory(
sslContextBuilder.build(),
new String[]{"SSLv2Hello", "SSLv3", "TLSv1", "TLSv1.2"},
null,
NoopHostnameVerifier.INSTANCE
);
Registry<ConnectionSocketFactory> registryBuilder = RegistryBuilder.<ConnectionSocketFactory>create()
.register(HTTP, new PlainConnectionSocketFactory())
.register(HTTPS, sslConnectionSocketFactory)
.build();
poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(registryBuilder);
poolingHttpClientConnectionManager.setMaxTotal(200);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
}
/**
* 获取连接
*
* @return
* @throws Exception
*/
public static CloseableHttpClient getHttpClinet() throws Exception {
CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory)
.setConnectionManager(poolingHttpClientConnectionManager)
.setConnectionManagerShared(true)
.build();
return httpClient;
}
/**
* 发送post请求
* @param url:请求地址
* @param header:请求头参数
* @param params:表单参数 form提交
* @param httpEntity json/xml参数
* @return
*/
public static String doPostRequest(String url, Map<String, String> header, Map<String, String> params, HttpEntity httpEntity) {
String resultStr = "";
if (StringUtils.isEmpty(url)) {
return resultStr;
}
url = "https://"+url;
try {
// http请求
HttpClient httpClient = new HTTPSTrustClient().init();
resultStr = HTTPSClientUtil.doPost(httpClient, url, header, params);
log.info("请求正常,请求地址:{},响应结果:{}", url, resultStr);
} catch (Exception e) {
e.printStackTrace();
}
return resultStr;
}
public static String doGetRequest(String url, Map<String, String> header, Map<String, String> params) {
String resultStr = "";
if (StringUtils.isEmpty(url)) {
return resultStr;
}
url = "https://"+url;
try {
// http请求
HttpClient httpClient = new HTTPSTrustClient().init();
resultStr = HTTPSClientUtil.doGet(httpClient, url, header, params);
log.info("请求正常,请求地址:{},响应结果:{}", url, resultStr);
} catch (Exception e) {
e.printStackTrace();
}
return resultStr;
}
/**
* 关掉连接释放资源
*/
private static void closeConnection(CloseableHttpClient httpClient, CloseableHttpResponse httpResponse) {
if (httpClient != null) {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (httpResponse != null) {
try {
httpResponse.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 构造get请求的参数
*
* @return
*/
private static String buildUrl(Map<String, String> map) {
if (MapUtils.isEmpty(map)) {
return "";
}
StringBuffer stringBuffer = new StringBuffer("?");
for (Map.Entry<String, String> stringStringEntry : map.entrySet()) {
stringBuffer.append(stringStringEntry.getKey()).append("=").append(stringStringEntry.getValue()).append("&");
}
String result = stringBuffer.toString();
if (StringUtils.hasText(result)) {
result = result.substring(0, result.length() - 1);//去掉结尾的&连接符
}
return result;
}
}
- 使用说明
- header与params直接封装Map即可
- HttpEntity 使用方式 new StringEntity("JSON格式字符串,将实体直接转换为JSON数据即可",“UTF-8,指定编码格式即可”)
- 集合或者数组,可以启用 IdentityHashMap 传值
Mr.Chenyb 随笔记录,方便自己使用