diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Engine.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Engine.java index 2c8d9b358..9c551f8f3 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Engine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient4/HttpClient4Engine.java @@ -29,6 +29,7 @@ import org.apache.http.message.BasicHeader; import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.net.url.UrlBuilder; +import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.GlobalHeaders; import org.dromara.hutool.http.HttpException; import org.dromara.hutool.http.client.ClientConfig; @@ -108,19 +109,17 @@ public class HttpClient4Engine implements ClientEngine { } final HttpClientBuilder clientBuilder = HttpClients.custom(); - final ClientConfig config = this.config; - if (null != config) { - // SSL配置 - final SSLInfo sslInfo = config.getSslInfo(); - if (null != sslInfo) { - clientBuilder.setSSLSocketFactory(buildSocketFactory(sslInfo)); - } - if(config.isDisableCache()){ - clientBuilder.disableAuthCaching(); - } - - clientBuilder.setDefaultRequestConfig(buildRequestConfig(config)); + final ClientConfig config = ObjUtil.defaultIfNull(this.config, ClientConfig::of); + // SSL配置 + final SSLInfo sslInfo = config.getSslInfo(); + if (null != sslInfo) { + clientBuilder.setSSLSocketFactory(buildSocketFactory(sslInfo)); } + if(config.isDisableCache()){ + clientBuilder.disableAuthCaching(); + } + + clientBuilder.setDefaultRequestConfig(buildRequestConfig(config)); // 设置默认头信息 clientBuilder.setDefaultHeaders(toHeaderList(GlobalHeaders.INSTANCE.headers())); diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Engine.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Engine.java index d7af84e68..da14c9b18 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Engine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/httpclient5/HttpClient5Engine.java @@ -32,6 +32,7 @@ import org.apache.hc.core5.http.message.BasicHeader; import org.dromara.hutool.core.io.IoUtil; import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.net.url.UrlBuilder; +import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.GlobalHeaders; import org.dromara.hutool.http.HttpException; import org.dromara.hutool.http.client.ClientConfig; @@ -113,13 +114,11 @@ public class HttpClient5Engine implements ClientEngine { final HttpClientBuilder clientBuilder = HttpClients.custom(); - final ClientConfig config = this.config; - if (null != config) { - clientBuilder.setConnectionManager(buildConnectionManager(config)); - clientBuilder.setDefaultRequestConfig(buildRequestConfig(config)); - if(config.isDisableCache()){ - clientBuilder.disableAuthCaching(); - } + final ClientConfig config = ObjUtil.defaultIfNull(this.config, ClientConfig::of); + clientBuilder.setConnectionManager(buildConnectionManager(config)); + clientBuilder.setDefaultRequestConfig(buildRequestConfig(config)); + if(config.isDisableCache()){ + clientBuilder.disableAuthCaching(); } // 设置默认头信息 diff --git a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/okhttp/OkHttpEngine.java b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/okhttp/OkHttpEngine.java index 07b1c6b5c..ccb1113de 100644 --- a/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/okhttp/OkHttpEngine.java +++ b/hutool-http/src/main/java/org/dromara/hutool/http/client/engine/okhttp/OkHttpEngine.java @@ -14,6 +14,7 @@ package org.dromara.hutool.http.client.engine.okhttp; import okhttp3.OkHttpClient; import org.dromara.hutool.core.io.IORuntimeException; +import org.dromara.hutool.core.util.ObjUtil; import org.dromara.hutool.http.client.ClientConfig; import org.dromara.hutool.http.client.Request; import org.dromara.hutool.http.client.Response; @@ -84,30 +85,28 @@ public class OkHttpEngine implements ClientEngine { final OkHttpClient.Builder builder = new OkHttpClient.Builder(); - final ClientConfig config = this.config; - if (null != config) { - // 连接超时 - final int connectionTimeout = config.getConnectionTimeout(); - if (connectionTimeout > 0) { - builder.connectTimeout(connectionTimeout, TimeUnit.MILLISECONDS); - } - // 读写超时 - final int readTimeout = config.getReadTimeout(); - if (readTimeout > 0) { - // 读写共用读取超时 - builder.readTimeout(config.getReadTimeout(), TimeUnit.MILLISECONDS) - .writeTimeout(config.getReadTimeout(), TimeUnit.MILLISECONDS); - } - - // SSL - final SSLInfo sslInfo = config.getSslInfo(); - if (null != sslInfo) { - builder.sslSocketFactory(sslInfo.getSocketFactory(), sslInfo.getTrustManager()); - } - - // 设置代理 - setProxy(builder, config); + final ClientConfig config = ObjUtil.defaultIfNull(this.config, ClientConfig::of); + // 连接超时 + final int connectionTimeout = config.getConnectionTimeout(); + if (connectionTimeout > 0) { + builder.connectTimeout(connectionTimeout, TimeUnit.MILLISECONDS); } + // 读写超时 + final int readTimeout = config.getReadTimeout(); + if (readTimeout > 0) { + // 读写共用读取超时 + builder.readTimeout(config.getReadTimeout(), TimeUnit.MILLISECONDS) + .writeTimeout(config.getReadTimeout(), TimeUnit.MILLISECONDS); + } + + // SSL + final SSLInfo sslInfo = config.getSslInfo(); + if (null != sslInfo) { + builder.sslSocketFactory(sslInfo.getSocketFactory(), sslInfo.getTrustManager()); + } + + // 设置代理 + setProxy(builder, config); // 默认关闭自动跳转 builder.setFollowRedirects$okhttp(false); diff --git a/hutool-http/src/test/java/org/dromara/hutool/http/client/IssueI8WU4MTest.java b/hutool-http/src/test/java/org/dromara/hutool/http/client/IssueI8WU4MTest.java new file mode 100644 index 000000000..b85fb3865 --- /dev/null +++ b/hutool-http/src/test/java/org/dromara/hutool/http/client/IssueI8WU4MTest.java @@ -0,0 +1,26 @@ +package org.dromara.hutool.http.client; + +import org.dromara.hutool.http.HttpGlobalConfig; +import org.dromara.hutool.http.HttpUtil; +import org.dromara.hutool.http.client.engine.okhttp.OkHttpEngine; +import org.dromara.hutool.http.meta.HeaderName; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +public class IssueI8WU4MTest { + + @Test + @Disabled + void timeoutTest() { + //设置超时,单位毫秒,这里1毫秒,按道理100%超时 + HttpGlobalConfig.setTimeout(1); + + final String body = HttpUtil.createGet("https://restapi.amap.com/v3/ip?Key=ad054b1810672fb0ff6107cd71518837") + .header(HeaderName.CONTENT_TYPE, "application/x-www-form-urlencoded; charset=utf-8") + .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0") + .send(new OkHttpEngine()) + .body(). + getString(); + System.out.println(body); + } +}