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<String, String> 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();
|
}
|
}
|