diff --git a/backend/src/main/java/com/qqchen/deploy/backend/workflow/delegate/HttpRequestNodeDelegate.java b/backend/src/main/java/com/qqchen/deploy/backend/workflow/delegate/HttpRequestNodeDelegate.java index dc8653b0..98ee9ff8 100644 --- a/backend/src/main/java/com/qqchen/deploy/backend/workflow/delegate/HttpRequestNodeDelegate.java +++ b/backend/src/main/java/com/qqchen/deploy/backend/workflow/delegate/HttpRequestNodeDelegate.java @@ -33,30 +33,27 @@ public class HttpRequestNodeDelegate extends BaseNodeDelegate configs, + protected void executeInternal(DelegateExecution execution, + Map configs, HttpRequestInputMapping input) { long startTime = System.currentTimeMillis(); - + try { - logInfo(String.format("开始HTTP请求: %s %s (超时: %dms)", - input.getMethod(), input.getUrl(), input.getTimeout())); - + // 1. 创建专属的RestTemplate,使用节点配置的超时时间 RestTemplate restTemplate = createRestTemplate(input.getTimeout()); - + // 2. 构建请求 HttpHeaders headers = buildHeaders(input.getHeadersAsMap()); HttpEntity entity = new HttpEntity<>(input.getBody(), headers); - + // 3. 构建完整URL(带查询参数) String fullUrl = buildUrl(input.getUrl(), input.getQueryParamsAsMap()); - - logInfo(String.format("请求URL: %s", fullUrl)); + if (input.getBody() != null) { logInfo(String.format("请求体: %s", JsonUtils.toJson(input.getBody()))); } - + // 4. 发送HTTP请求 ResponseEntity response = restTemplate.exchange( fullUrl, @@ -64,13 +61,13 @@ public class HttpRequestNodeDelegate extends BaseNodeDelegate response, long responseTime, + private void parseResponse(ResponseEntity response, long responseTime, HttpRequestInputMapping.ResponseBodyType type) { output.setStatusCode(response.getStatusCode().value()); output.setResponseTime(responseTime); output.setIsSuccess(response.getStatusCode().is2xxSuccessful()); - + // 解析响应头 Map headerMap = new HashMap<>(); - response.getHeaders().forEach((k, v) -> + response.getHeaders().forEach((k, v) -> headerMap.put(k, String.join(", ", v)) ); output.setResponseHeaders(headerMap); - + // 解析响应体 String body = response.getBody(); if (body != null) { output.setResponseSize((long) body.length()); - + switch (type) { case JSON -> { try { @@ -115,7 +112,7 @@ public class HttpRequestNodeDelegate extends BaseNodeDelegate { output.setResponseBody(body); - logInfo(String.format("响应体(TEXT): %s", body.length() > 200 ? + logInfo(String.format("响应体(TEXT): %s", body.length() > 200 ? body.substring(0, 200) + "..." : body)); } case XML -> output.setResponseBody(body); // 简化实现,直接返回文本 @@ -123,7 +120,7 @@ public class HttpRequestNodeDelegate extends BaseNodeDelegate @@ -146,7 +143,7 @@ public class HttpRequestNodeDelegate extends BaseNodeDelegate @@ -193,56 +190,56 @@ public class HttpRequestNodeDelegate extends BaseNodeDelegate 0) ? timeout : 30000; - + // 连接超时:建立TCP连接的超时时间 factory.setConnectTimeout(timeoutMs); - + // 读取超时:等待服务器响应的超时时间 factory.setReadTimeout(timeoutMs); - + RestTemplate restTemplate = new RestTemplate(factory); return restTemplate; } - + /** * 构建请求头 */ private HttpHeaders buildHeaders(Map headersMap) { HttpHeaders headers = new HttpHeaders(); - + // 默认设置 Content-Type 为 JSON(如果有body且未指定) - if (currentInputMapping.getBody() != null && + if (currentInputMapping.getBody() != null && (headersMap == null || !headersMap.containsKey("Content-Type"))) { headers.setContentType(MediaType.APPLICATION_JSON); } - + if (headersMap != null) { headersMap.forEach(headers::set); } - + return headers; } - + /** * 构建完整URL(带查询参数) */ @@ -250,7 +247,7 @@ public class HttpRequestNodeDelegate extends BaseNodeDelegate