diff --git a/server/api-service/lowcoder-plugins/restApiPlugin/src/main/java/org/lowcoder/plugin/restapi/RestApiExecutor.java b/server/api-service/lowcoder-plugins/restApiPlugin/src/main/java/org/lowcoder/plugin/restapi/RestApiExecutor.java index 6f9ab7a37..84d053e62 100644 --- a/server/api-service/lowcoder-plugins/restApiPlugin/src/main/java/org/lowcoder/plugin/restapi/RestApiExecutor.java +++ b/server/api-service/lowcoder-plugins/restApiPlugin/src/main/java/org/lowcoder/plugin/restapi/RestApiExecutor.java @@ -47,7 +47,6 @@ import java.net.URISyntaxException; import java.nio.charset.StandardCharsets; import java.text.ParseException; -import java.time.Duration; import java.util.ArrayList; import java.util.Base64; import java.util.HashMap; @@ -94,7 +93,6 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.client.reactive.ClientHttpRequest; -import org.springframework.http.client.reactive.ReactorClientHttpConnector; import org.springframework.util.MultiValueMap; import org.springframework.web.reactive.function.BodyInserter; import org.springframework.web.reactive.function.BodyInserters; @@ -109,7 +107,6 @@ import lombok.Builder; import lombok.Getter; import reactor.core.publisher.Mono; -import reactor.netty.http.client.HttpClient; @Extension public class RestApiExecutor implements QueryExecutor { @@ -244,6 +241,7 @@ public Mono executeQuery(Object webClientFilter, RestApiQu WebClient.Builder webClientBuilder = WebClientBuildHelper.builder() .disallowedHosts(commonConfig.getDisallowedHosts()) .sslConfig(context.getSslConfig()) + .timeoutMs(context.getTimeoutMs()) .toWebClientBuilder(); Map allHeaders = context.getHeaders(); @@ -260,13 +258,9 @@ public Mono executeQuery(Object webClientFilter, RestApiQu webClientBuilder.filter(new BufferingFilter()); } - HttpClient httpClient = HttpClient.create() - .responseTimeout(Duration.ofMillis(context.getTimeoutMs())); - webClientBuilder.defaultCookies(injectCookies(context)); WebClient client = webClientBuilder .exchangeStrategies(exchangeStrategies) - .clientConnector(new ReactorClientHttpConnector(httpClient)) .build(); BodyInserter bodyInserter = buildBodyInserter( diff --git a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java index 02bd35ae5..c2b846f09 100644 --- a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java +++ b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java @@ -2,6 +2,7 @@ import java.security.cert.CertificateException; import java.security.cert.X509Certificate; +import java.time.Duration; import java.util.Set; import javax.net.ssl.SSLException; @@ -33,6 +34,7 @@ public class WebClientBuildHelper { private SslConfig sslConfig; private Set disallowedHosts; private boolean systemProxy; + private Long timeoutMs; static { proxyHost = System.getProperty("http.proxyHost"); @@ -61,12 +63,22 @@ public WebClientBuildHelper systemProxy() { return this; } + public WebClientBuildHelper timeoutMs(long milliseconds) { + this.timeoutMs = milliseconds; + return this; + } + public WebClient build() { return toWebClientBuilder().build(); } public Builder toWebClientBuilder() { HttpClient httpClient = HttpClient.create(); + if (timeoutMs != null) + { + httpClient.responseTimeout(Duration.ofMillis(timeoutMs)); + } + if (sslConfig != null) { if (sslConfig instanceof DisableVerifySslConfig) { httpClient = httpClient.secure(sslProviderWithoutCertVerify());