diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java index beb2bcd..9382d91 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java @@ -1,10 +1,13 @@ package com.ruoyi.common.utils.http; import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; +import java.io.OutputStream; +import java.io.OutputStreamWriter; import java.net.ConnectException; import java.net.SocketTimeoutException; import java.net.URL; @@ -222,39 +225,60 @@ public class HttpUtils public static String sendSSLPost(String url, String param, String contentType) { StringBuilder result = new StringBuilder(); - String urlNameString = url + "?" + param; + HttpsURLConnection conn = null; try { - log.info("sendSSLPost - {}", urlNameString); + log.info("sendSSLPost - {}", url); // 使用 TLSv1.2 提升与现代 HTTPS 服务的兼容性 SSLContext sc = SSLContext.getInstance("TLSv1.2"); sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom()); - URL console = new URL(urlNameString); - HttpsURLConnection conn = (HttpsURLConnection) console.openConnection(); + + URL console = new URL(url); + conn = (HttpsURLConnection) console.openConnection(); + conn.setSSLSocketFactory(sc.getSocketFactory()); + conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); + + // 基本请求设置 + conn.setRequestMethod("POST"); + conn.setUseCaches(false); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setConnectTimeout(10000); + conn.setReadTimeout(20000); + conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"); conn.setRequestProperty("Accept-Charset", "utf-8"); conn.setRequestProperty("Content-Type", contentType); - conn.setDoOutput(true); - conn.setDoInput(true); - conn.setSSLSocketFactory(sc.getSocketFactory()); - conn.setHostnameVerifier(new TrustAnyHostnameVerifier()); - conn.connect(); - InputStream is = conn.getInputStream(); - BufferedReader br = new BufferedReader(new InputStreamReader(is)); - String ret = ""; - while ((ret = br.readLine()) != null) + // 写入请求体 + try (OutputStream os = conn.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8); + BufferedWriter bw = new BufferedWriter(osw)) { - if (ret != null && !"".equals(ret.trim())) + if (param != null) { - result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8)); + bw.write(param); + } + bw.flush(); + } + + // 读取响应(包含非2xx时的错误流) + int status = conn.getResponseCode(); + InputStream is = (status >= 200 && status < 300) ? conn.getInputStream() : conn.getErrorStream(); + if (is != null) + { + try (BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) + { + String line; + while ((line = br.readLine()) != null) + { + result.append(line); + } } } log.info("recv - {}", result); - conn.disconnect(); - br.close(); } catch (ConnectException e) { @@ -272,6 +296,13 @@ public class HttpUtils { log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e); } + finally + { + if (conn != null) + { + try { conn.disconnect(); } catch (Exception ignore) { } + } + } return result.toString(); }