From 83e94584bf93952142f97b4bb56e28832acd487b Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 8 Sep 2023 19:09:40 +0800 Subject: [PATCH] fix code --- .../hutool/http/client/ClientConfig.java | 9 +++++++++ .../dromara/hutool/http/client/Request.java | 15 ++++++++++++-- .../client/engine/jdk/JdkHttpConnection.java | 6 +++--- .../org/dromara/hutool/http/ssl/SSLInfo.java | 3 +++ .../hutool/http/client/IssueI7ZRJUTest.java | 20 +++++++++++++++++++ 5 files changed, 48 insertions(+), 5 deletions(-) create mode 100755 hutool-http/src/test/java/org/dromara/hutool/http/client/IssueI7ZRJUTest.java diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/ClientConfig.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/ClientConfig.java index 7148ba87c..c0b972961 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/ClientConfig.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/ClientConfig.java @@ -143,6 +143,15 @@ public class ClientConfig { return this; } + /** + * 打开SSL验证,即使用引擎默认的SSL验证方式 + * + * @return this + */ + public ClientConfig enableSSLVerify(){ + return setSSLInfo(SSLInfo.DEFAULT); + } + /** * 是否禁用缓存 * diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/Request.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/Request.java index 5deba1906..222fbc6d3 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/Request.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/Request.java @@ -22,10 +22,11 @@ import org.dromara.hutool.core.util.CharsetUtil; import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.GlobalHeaders; import org.dromara.hutool.http.HttpGlobalConfig; -import org.dromara.hutool.http.HttpUtil; import org.dromara.hutool.http.client.body.HttpBody; import org.dromara.hutool.http.client.body.StringBody; import org.dromara.hutool.http.client.body.UrlEncodedFormBody; +import org.dromara.hutool.http.client.engine.ClientEngine; +import org.dromara.hutool.http.client.engine.ClientEngineFactory; import org.dromara.hutool.http.meta.HeaderName; import org.dromara.hutool.http.meta.Method; @@ -296,6 +297,16 @@ public class Request implements HeaderOperation { * @return 响应内容 */ public Response send() { - return HttpUtil.send(this); + return send(ClientEngineFactory.getEngine()); + } + + /** + * 发送请求 + * + * @param engine 自自定义引擎 + * @return 响应内容 + */ + public Response send(final ClientEngine engine){ + return engine.send(this); } } diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpConnection.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpConnection.java index 1c66abe9c..b556e53b0 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpConnection.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/jdk/JdkHttpConnection.java @@ -12,10 +12,10 @@ package org.dromara.hutool.http.client.engine.jdk; +import org.dromara.hutool.core.lang.Opt; import org.dromara.hutool.core.net.url.URLUtil; import org.dromara.hutool.core.reflect.FieldUtil; import org.dromara.hutool.core.text.StrUtil; -import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.HttpException; import org.dromara.hutool.http.client.HeaderOperation; import org.dromara.hutool.http.meta.Method; @@ -221,8 +221,8 @@ public class JdkHttpConnection implements HeaderOperation { // Https请求 final HttpsURLConnection httpsConn = (HttpsURLConnection) conn; // 验证域 - httpsConn.setHostnameVerifier(ObjUtil.defaultIfNull(sslInfo.getHostnameVerifier(), SSLInfo.TRUST_ANY.getHostnameVerifier())); - httpsConn.setSSLSocketFactory(ObjUtil.defaultIfNull(sslInfo.getSocketFactory(), SSLInfo.TRUST_ANY.getSocketFactory())); + Opt.ofNullable(sslInfo.getHostnameVerifier()).ifPresent(httpsConn::setHostnameVerifier); + Opt.ofNullable(sslInfo.getSocketFactory()).ifPresent(httpsConn::setSSLSocketFactory); } return this; diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/ssl/SSLInfo.java b/hutool-http/src/main/java/org/dromara/hutool/http/ssl/SSLInfo.java index 5a7fab55f..4d545aa70 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/ssl/SSLInfo.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/ssl/SSLInfo.java @@ -176,6 +176,9 @@ public class SSLInfo { * @return {@link SSLSocketFactory} */ public SSLSocketFactory getSocketFactory() { + if(null == this.sslContext){ + return null; + } final SSLSocketFactory factory = this.sslContext.getSocketFactory(); return new CustomProtocolsSSLFactory(factory, this.protocols); } diff --git a/hutool-http/src/test/java/org/dromara/hutool/http/client/IssueI7ZRJUTest.java b/hutool-http/src/test/java/org/dromara/hutool/http/client/IssueI7ZRJUTest.java new file mode 100755 index 000000000..962b0c7e4 --- /dev/null +++ b/hutool-http/src/test/java/org/dromara/hutool/http/client/IssueI7ZRJUTest.java @@ -0,0 +1,20 @@ +package org.dromara.hutool.http.client; + +import org.dromara.hutool.core.lang.Console; +import org.dromara.hutool.http.client.engine.jdk.JdkClientEngine; +import org.dromara.hutool.http.ssl.SSLInfo; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +public class IssueI7ZRJUTest { + + @SuppressWarnings({"resource", "TestFailedLine"}) + @Test + @Disabled + void getBadSSlTest() { + final Response response = Request.of("https://expired.badssl.com/") + .send(new JdkClientEngine().init(ClientConfig.of().setSSLInfo(SSLInfo.DEFAULT))); + + Console.log(response.body()); + } +}