package com.ruoyi.common.utils; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.Map; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.cert.X509Certificate; import com.alibaba.fastjson.JSON; /** * HTTP工具类 */ public class HttpUtil { private static final int CONNECT_TIMEOUT = 5000; private static final int READ_TIMEOUT = 5000; static { try { // 创建信任所有证书的TrustManager TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() { public X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted(X509Certificate[] certs, String authType) { } public void checkServerTrusted(X509Certificate[] certs, String authType) { } } }; // 初始化SSLContext SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // 设置主机名验证器 HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true); } catch (Exception e) { throw new RuntimeException("初始化SSL上下文失败", e); } } /** * 发送POST请求 * @param url 请求URL * @param params 请求参数 * @return 响应内容 */ public static String post(String url, Map params) { StringBuilder response = new StringBuilder(); HttpURLConnection conn = null; try { // 创建连接 URL requestUrl = new URL(url); boolean isHttps = url.toLowerCase().startsWith("https"); // 根据协议类型创建连接 if (isHttps) { conn = (HttpsURLConnection) requestUrl.openConnection(); } else { conn = (HttpURLConnection) requestUrl.openConnection(); } // 设置请求属性 conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); conn.setRequestProperty("Content-Type", "application/json"); conn.setRequestProperty("Accept", "application/json"); // 设置超时时间 conn.setConnectTimeout(CONNECT_TIMEOUT); conn.setReadTimeout(READ_TIMEOUT); // 构建JSON参数字符串 String jsonParams = JSON.toJSONString(params); // 发送请求参数 try (OutputStream os = conn.getOutputStream()) { os.write(jsonParams.getBytes(StandardCharsets.UTF_8)); os.flush(); } // 获取响应码 int responseCode = conn.getResponseCode(); if (responseCode != HttpURLConnection.HTTP_OK) { throw new RuntimeException("HTTP请求失败,响应码: " + responseCode); } // 读取响应 try (BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) { String line; while ((line = reader.readLine()) != null) { response.append(line); } } } catch (Exception e) { throw new RuntimeException("HTTP请求失败: " + e.getMessage(), e); } finally { if (conn != null) { conn.disconnect(); } } return response.toString(); } }