diff --git a/hutool-core/src/main/java/cn/hutool/core/net/ssl/SSLContextBuilder.java b/hutool-core/src/main/java/cn/hutool/core/net/ssl/SSLContextBuilder.java index fe62c62e5..62975599f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/net/ssl/SSLContextBuilder.java +++ b/hutool-core/src/main/java/cn/hutool/core/net/ssl/SSLContextBuilder.java @@ -18,7 +18,7 @@ import java.security.SecureRandom; *
@@ -32,7 +32,7 @@ public class SSLContextBuilder implements SSLProtocols, Builder
- * 继承{@link X509ExtendedTrustManager}的原因见:https://blog.csdn.net/ghaohao/article/details/79454913
+ * 新任所有信任管理器,默认信任所有客户端和服务端证书
+ * 继承{@link X509ExtendedTrustManager}的原因见:
+ * https://blog.csdn.net/ghaohao/article/details/79454913
*
* @author Looly
* @since 5.5.7
*/
-public class DefaultTrustManager extends X509ExtendedTrustManager {
+public class TrustAnyTrustManager extends X509ExtendedTrustManager {
/**
- * 默认的全局单例默认信任管理器,默认信任所有客户端和服务端证书
+ * 全局单例信任管理器,默认信任所有客户端和服务端证书
+ *
* @since 5.7.8
*/
- public static DefaultTrustManager INSTANCE = new DefaultTrustManager();
+ public static TrustAnyTrustManager INSTANCE = new TrustAnyTrustManager();
@Override
public X509Certificate[] getAcceptedIssuers() {
diff --git a/hutool-http/src/main/java/cn/hutool/http/client/ClientConfig.java b/hutool-http/src/main/java/cn/hutool/http/client/ClientConfig.java
index d07d27a40..95fc4ea0f 100755
--- a/hutool-http/src/main/java/cn/hutool/http/client/ClientConfig.java
+++ b/hutool-http/src/main/java/cn/hutool/http/client/ClientConfig.java
@@ -3,7 +3,7 @@ package cn.hutool.http.client;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.net.ssl.SSLUtil;
import cn.hutool.http.HttpGlobalConfig;
-import cn.hutool.http.ssl.DefaultSSLInfo;
+import cn.hutool.http.ssl.TrustAnySSLInfo;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSocketFactory;
@@ -58,8 +58,8 @@ public class ClientConfig {
public ClientConfig() {
connectionTimeout = HttpGlobalConfig.getTimeout();
readTimeout = HttpGlobalConfig.getTimeout();
- hostnameVerifier = DefaultSSLInfo.TRUST_ANY_HOSTNAME_VERIFIER;
- socketFactory = DefaultSSLInfo.DEFAULT_SSF;
+ hostnameVerifier = TrustAnySSLInfo.TRUST_ANY_HOSTNAME_VERIFIER;
+ socketFactory = TrustAnySSLInfo.DEFAULT_SSF;
}
/**
@@ -179,12 +179,12 @@ public class ClientConfig {
*
* @param protocol 协议
* @return this
- * @see SSLUtil#createSSLContext(String)
+ * @see SSLUtil#createTrustAnySSLContext(String)
* @see #setSocketFactory(SSLSocketFactory)
*/
public ClientConfig setSSLProtocol(final String protocol) {
Assert.notBlank(protocol, "protocol must be not blank!");
- setSocketFactory(SSLUtil.createSSLContext(protocol).getSocketFactory());
+ setSocketFactory(SSLUtil.createTrustAnySSLContext(protocol).getSocketFactory());
return this;
}
diff --git a/hutool-http/src/main/java/cn/hutool/http/client/engine/httpclient5/HttpClient5Engine.java b/hutool-http/src/main/java/cn/hutool/http/client/engine/httpclient5/HttpClient5Engine.java
index bc3d3fef6..5b3557ca4 100755
--- a/hutool-http/src/main/java/cn/hutool/http/client/engine/httpclient5/HttpClient5Engine.java
+++ b/hutool-http/src/main/java/cn/hutool/http/client/engine/httpclient5/HttpClient5Engine.java
@@ -2,6 +2,7 @@ package cn.hutool.http.client.engine.httpclient5;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Assert;
+import cn.hutool.core.net.ssl.SSLUtil;
import cn.hutool.core.net.url.UrlBuilder;
import cn.hutool.http.GlobalHeaders;
import cn.hutool.http.HttpException;
@@ -11,11 +12,13 @@ import cn.hutool.http.client.Request;
import cn.hutool.http.client.Response;
import cn.hutool.http.client.body.HttpBody;
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
+import org.apache.hc.client5.http.config.ConnectionConfig;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.classic.HttpClients;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
+import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactoryBuilder;
import org.apache.hc.core5.http.ClassicHttpRequest;
import org.apache.hc.core5.http.ClassicHttpResponse;
import org.apache.hc.core5.http.Header;
@@ -86,14 +89,22 @@ public class HttpClient5Engine implements ClientEngine {
return;
}
+ // 连接配置
+ final PoolingHttpClientConnectionManagerBuilder connectionManagerBuilder = PoolingHttpClientConnectionManagerBuilder.create()
+ .setSSLSocketFactory(SSLConnectionSocketFactoryBuilder.create()
+ .setSslContext(SSLUtil.createTrustAnySSLContext()).build());
+ final int connectionTimeout = this.config.getConnectionTimeout();
+ if(connectionTimeout > 0){
+ connectionManagerBuilder.setDefaultConnectionConfig(ConnectionConfig.custom()
+ .setConnectTimeout(connectionTimeout, TimeUnit.MILLISECONDS).build());
+ }
+
+ // 请求配置
RequestConfig requestConfig = null;
if(null != this.config){
final RequestConfig.Builder builder = RequestConfig.custom();
- final int connectionTimeout = this.config.getConnectionTimeout();
if(connectionTimeout > 0){
- // TODO 细化替换
- builder.setConnectTimeout(connectionTimeout, TimeUnit.MILLISECONDS);
builder.setConnectionRequestTimeout(connectionTimeout, TimeUnit.MILLISECONDS);
}
final int readTimeout = this.config.getReadTimeout();
@@ -105,6 +116,7 @@ public class HttpClient5Engine implements ClientEngine {
}
final HttpClientBuilder builder = HttpClients.custom()
+ .setConnectionManager(connectionManagerBuilder.build())
.setDefaultRequestConfig(requestConfig)
// 设置默认头信息
.setDefaultHeaders(toHeaderList(GlobalHeaders.INSTANCE.headers()));
diff --git a/hutool-http/src/main/java/cn/hutool/http/client/engine/jdk/HttpConnection.java b/hutool-http/src/main/java/cn/hutool/http/client/engine/jdk/HttpConnection.java
index 6d4072780..302046572 100644
--- a/hutool-http/src/main/java/cn/hutool/http/client/engine/jdk/HttpConnection.java
+++ b/hutool-http/src/main/java/cn/hutool/http/client/engine/jdk/HttpConnection.java
@@ -7,7 +7,7 @@ import cn.hutool.core.util.ObjUtil;
import cn.hutool.http.HttpException;
import cn.hutool.http.client.HeaderOperation;
import cn.hutool.http.meta.Method;
-import cn.hutool.http.ssl.DefaultSSLInfo;
+import cn.hutool.http.ssl.TrustAnySSLInfo;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
@@ -211,8 +211,8 @@ public class HttpConnection implements HeaderOperation