ZhuDeKang před 5 měsíci
rodič
revize
d5a84213e3

+ 2 - 2
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/controller/MdDataFieldController.java

@@ -46,8 +46,8 @@ public class MdDataFieldController extends BaseController
         List<MdDataField> list = mdDataFieldService.selectMdDataFieldList(mdDataField);
         return getDataTable(list);
     }
-    @GetMapping("/list/{dsCode}")
-    public AjaxResult listByDsCode(MdDataField mdDataField)
+    @GetMapping("/allList")
+    public AjaxResult allList(MdDataField mdDataField)
     {
         List<MdDataField> list = mdDataFieldService.selectMdDataFieldList(mdDataField);
         return AjaxResult.success(list);

+ 3 - 0
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/domain/MdModelFlow.java

@@ -137,3 +137,6 @@ public class MdModelFlow extends BaseEntity
             .toString();
     }
 }
+
+
+

+ 19 - 3
ruoyi-api-patform/src/main/java/com/ruoyi/interfaces/service/impl/PtServiceServiceImpl.java

@@ -8,7 +8,6 @@ import com.ruoyi.common.utils.RedisOperator;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.http.HttpUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.interfaces.domain.MdModelInfo;
 import com.ruoyi.interfaces.domain.PtService;
 import com.ruoyi.interfaces.domain.PtServiceParam;
 import com.ruoyi.interfaces.domain.vo.MdModelInfoVo;
@@ -21,6 +20,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -141,14 +141,30 @@ public class PtServiceServiceImpl extends ServiceImpl<PtServiceMapper, PtService
 
     @Override
     public String testRun(PtService ptService) {
-        List<PtServiceParam> ptServiceParams = ptServiceParamMapper.selectAll(ptService.getSrvId());
+
+        String tokenUrl = "http://localhost:9002/sh-api/login";
+        String bodyPar = "{\n" +
+                "  \"username\": \"admin\",\n" +
+                "  \"password\": \"Gw#$1601\"\n" +
+                "}";
+        String token = "";
+
+        try {
+            token =  HttpUtils.sendBodyPostTest(tokenUrl,bodyPar,null);
+            System.out.println(token);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+
+
+       /* List<PtServiceParam> ptServiceParams = ptServiceParamMapper.selectAll(ptService.getSrvId());
         String paramString = ptServiceParams.stream().map(p -> p.getParamCode() + "=" + p.getParamValue()).collect(Collectors.joining());
         switch (ptService.getRqtype()) {
             case "POST":
             return HttpUtils.sendPost(ptService.getUrl(),paramString);
             case "GET":
                 return HttpUtils.sendGet(ptService.getUrl(),paramString);
-        }
+        }*/
         return null;
     }
 

+ 1 - 1
ruoyi-api-patform/src/main/resources/mapper/interfaces/MdDataFieldMapper.xml

@@ -27,7 +27,7 @@
     </resultMap>
 
     <sql id="selectMdDataFieldVo">
-        select DC_CODE, META_TABLE, FIELD_CODE, FIELD_NAME, FIELD_TYPE, FIELD_LENGTH, FIELD_PRECISION, FIELD_ISPRI, FIELD_ISNULLABLE, FIELD_DEFAULT, FIELD_DESC, FIELD_STATUS, FIELD_ORDER, FIELD_EXTEND, FIELD_EXTEND_TABLE, FIELD_INPUT_TYPE, FIELD_INPUT_FORMAT, FIELD_INPUT_DEFAULT, FIELD_VIEW_TYPE, FIELD_DICT from md_data_field
+        select DC_CODE,  FIELD_CODE, FIELD_NAME, FIELD_TYPE, FIELD_LENGTH, FIELD_PRECISION, FIELD_ISPRI, FIELD_ISNULLABLE, FIELD_DEFAULT, FIELD_DESC, FIELD_STATUS, FIELD_ORDER, FIELD_EXTEND, FIELD_EXTEND_TABLE, FIELD_INPUT_TYPE, FIELD_INPUT_FORMAT, FIELD_INPUT_DEFAULT, FIELD_VIEW_TYPE, FIELD_DICT from md_data_field
     </sql>
 
     <select id="selectMdDataFieldList" parameterType="com.ruoyi.interfaces.domain.MdDataField" resultMap="MdDataFieldResult">

+ 9 - 0
ruoyi-common/pom.xml

@@ -149,6 +149,15 @@
             <groupId>com.squareup.okhttp3</groupId>
             <artifactId>okhttp</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpmime</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>

+ 349 - 114
ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java

@@ -1,34 +1,56 @@
 package com.ruoyi.common.utils.http;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
+import java.io.*;
 import java.net.ConnectException;
 import java.net.SocketTimeoutException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
 import java.security.cert.X509Certificate;
+import java.util.Base64;
+import java.util.HashMap;
 import javax.net.ssl.HostnameVerifier;
 import javax.net.ssl.HttpsURLConnection;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.X509TrustManager;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.utils.StringUtils;
+import sun.net.www.protocol.http.HttpURLConnection;
+
+
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.*;
+import java.net.*;
+import java.nio.charset.StandardCharsets;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SecureRandom;
+import java.security.cert.X509Certificate;
+import java.util.HashMap;
 
 /**
  * 通用http发送方法
- * 
+ *
  * @author ruoyi
  */
-public class HttpUtils
-{
+public class HttpUtils {
     private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
 
     /**
@@ -37,80 +59,61 @@ public class HttpUtils
      * @param url 发送请求的 URL
      * @return 所代表远程资源的响应结果
      */
-    public static String sendGet(String url)
-    {
+    public static String sendGet(String url) {
         return sendGet(url, StringUtils.EMPTY);
     }
 
     /**
      * 向指定 URL 发送GET方法的请求
      *
-     * @param url 发送请求的 URL
+     * @param url   发送请求的 URL
      * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
      * @return 所代表远程资源的响应结果
      */
-    public static String sendGet(String url, String param)
-    {
+    public static String sendGet(String url, String param) {
         return sendGet(url, param, Constants.UTF8);
     }
 
     /**
      * 向指定 URL 发送GET方法的请求
      *
-     * @param url 发送请求的 URL
-     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+     * @param url         发送请求的 URL
+     * @param param       请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
      * @param contentType 编码类型
      * @return 所代表远程资源的响应结果
      */
-    public static String sendGet(String url, String param, String contentType)
-    {
+    public static String sendGet(String url, String param, String contentType) {
         StringBuilder result = new StringBuilder();
         BufferedReader in = null;
-        try
-        {
+        try {
             String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
             log.info("sendGet - {}", urlNameString);
             URL realUrl = new URL(urlNameString);
             URLConnection connection = realUrl.openConnection();
             connection.setRequestProperty("accept", "*/*");
             connection.setRequestProperty("connection", "Keep-Alive");
-            connection.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
+            connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
             connection.connect();
             in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
             String line;
-            while ((line = in.readLine()) != null)
-            {
+            while ((line = in.readLine()) != null) {
                 result.append(line);
             }
             log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
+        } catch (ConnectException e) {
             log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
+        } catch (SocketTimeoutException e) {
             log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
+        } catch (IOException e) {
             log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (in != null)
-                {
+        } finally {
+            try {
+                if (in != null) {
                     in.close();
                 }
-            }
-            catch (Exception ex)
-            {
+            } catch (Exception ex) {
                 log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
             }
         }
@@ -120,23 +123,22 @@ public class HttpUtils
     /**
      * 向指定 URL 发送POST方法的请求
      *
-     * @param url 发送请求的 URL
+     * @param url   发送请求的 URL
      * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
      * @return 所代表远程资源的响应结果
      */
-    public static String sendPost(String url, String param)
-    {
+    public static String sendPost(String url, String param) {
         PrintWriter out = null;
         BufferedReader in = null;
         StringBuilder result = new StringBuilder();
-        try
-        {
-            log.info("sendPost - {}", url);
-            URL realUrl = new URL(url);
+        try {
+            String urlNameString = url;
+            log.info("sendPost - {}", urlNameString);
+            URL realUrl = new URL(urlNameString);
             URLConnection conn = realUrl.openConnection();
             conn.setRequestProperty("accept", "*/*");
             conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
             conn.setRequestProperty("Accept-Charset", "utf-8");
             conn.setRequestProperty("contentType", "utf-8");
             conn.setDoOutput(true);
@@ -144,65 +146,164 @@ public class HttpUtils
             out = new PrintWriter(conn.getOutputStream());
             out.print(param);
             out.flush();
-            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8));
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
             String line;
-            while ((line = in.readLine()) != null)
-            {
+            while ((line = in.readLine()) != null) {
                 result.append(line);
             }
             log.info("recv - {}", result);
-        }
-        catch (ConnectException e)
-        {
+        } catch (ConnectException e) {
             log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
+        } catch (SocketTimeoutException e) {
             log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
+        } catch (IOException e) {
             log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
-        }
-        finally
-        {
-            try
-            {
-                if (out != null)
-                {
+        } finally {
+            try {
+                if (out != null) {
                     out.close();
                 }
-                if (in != null)
-                {
+                if (in != null) {
                     in.close();
                 }
+            } catch (IOException ex) {
+                log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+            }
+        }
+        return result.toString();
+    }
+
+    public static String sendJsonPost(String url, String param, HashMap<String, String> headers) {
+        PrintWriter out = null;
+        BufferedReader in = null;
+        StringBuilder result = new StringBuilder();
+        try {
+            String urlNameString = url;
+            log.info("sendPost - {}", urlNameString);
+            URL realUrl = new URL(urlNameString);
+            URLConnection conn = realUrl.openConnection();
+            // 设置通用的请求属性
+            conn.setRequestProperty("accept", "*/*");
+            conn.setRequestProperty("connection", "Keep-Alive");
+            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+            conn.setRequestProperty("Accept-Charset", "utf-8");
+            for (String key : headers.keySet()) {
+                conn.setRequestProperty(key, headers.get(key));
+            }
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            out = new PrintWriter(conn.getOutputStream());
+            out.print(param);
+            out.flush();
+            in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
+            String line;
+            while ((line = in.readLine()) != null) {
+                result.append(line);
             }
-            catch (IOException ex)
-            {
+            log.info("recv - {}", result);
+        } catch (ConnectException e) {
+            log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+        } catch (SocketTimeoutException e) {
+            log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+        } catch (IOException e) {
+            log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+        } catch (Exception e) {
+            log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+        } finally {
+            try {
+                if (out != null) {
+                    out.close();
+                }
+                if (in != null) {
+                    in.close();
+                }
+            } catch (IOException ex) {
                 log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
             }
         }
         return result.toString();
     }
 
-    public static String sendSSLPost(String url, String param)
-    {
+
+    public static String sendBodyPostTest(String url, String param, HashMap<String, String> headers) throws IOException {
+        if (url == null || param == null) {
+            throw new IllegalArgumentException("URL and parameters cannot be null");
+        }
+
+        HttpURLConnection conn = null;
+        StringBuilder result = new StringBuilder();
+        try {
+            URL realUrl = new URL(url);
+            conn = (HttpURLConnection) realUrl.openConnection();
+            conn.setRequestMethod("POST");
+
+            // 设置通用请求头
+            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
+            conn.setRequestProperty("Accept", "application/json");
+            if (StringUtils.isNotEmpty(headers)) {
+                headers.remove("Content-Type"); // 防御性移除外部可能传入的冲突头
+                headers.forEach(conn::setRequestProperty);
+            }
+
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            conn.setConnectTimeout(5000);    // 设置超时
+            conn.setReadTimeout(10000);
+
+            // 写入请求体(显式 UTF-8 编码)
+            try (OutputStream os = conn.getOutputStream();
+                 OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8);
+                 BufferedWriter writer = new BufferedWriter(osw)) {
+                writer.write(param);
+                writer.flush();
+            }
+
+            // 检查 HTTP 状态码
+            int status = conn.getResponseCode();
+            if (status != HttpURLConnection.HTTP_OK) {
+                throw new IOException("HTTP error code: " + status);
+            }
+
+            // 读取响应(显式 UTF-8 解码)
+            try (BufferedReader in = new BufferedReader(
+                    new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
+                String line;
+                while ((line = in.readLine()) != null) {
+                    result.append(line);
+                }
+            }
+
+            log.info("Request succeeded, response: {}", result);
+        } catch (ConnectException | SocketTimeoutException e) {
+            log.error("Connection error: {}", url, e);
+            throw e;
+        } catch (IOException e) {
+            log.error("I/O error: {}", url, e);
+            throw e;
+        } finally {
+            if (conn != null) {
+                conn.disconnect();
+            }
+        }
+        return result.toString();
+    }
+
+
+    public static String sendSSLPost(String url, String param) {
         StringBuilder result = new StringBuilder();
         String urlNameString = url + "?" + param;
-        try
-        {
+        try {
             log.info("sendSSLPost - {}", urlNameString);
             SSLContext sc = SSLContext.getInstance("SSL");
-            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
+            sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
             URL console = new URL(urlNameString);
             HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
             conn.setRequestProperty("accept", "*/*");
             conn.setRequestProperty("connection", "Keep-Alive");
-            conn.setRequestProperty("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
+            conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
             conn.setRequestProperty("Accept-Charset", "utf-8");
             conn.setRequestProperty("contentType", "utf-8");
             conn.setDoOutput(true);
@@ -214,61 +315,195 @@ public class HttpUtils
             InputStream is = conn.getInputStream();
             BufferedReader br = new BufferedReader(new InputStreamReader(is));
             String ret = "";
-            while ((ret = br.readLine()) != null)
-            {
-                if (ret != null && !"".equals(ret.trim()))
-                {
-                    result.append(new String(ret.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8));
+            while ((ret = br.readLine()) != null) {
+                if (ret != null && !"".equals(ret.trim())) {
+                    result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
                 }
             }
             log.info("recv - {}", result);
             conn.disconnect();
             br.close();
-        }
-        catch (ConnectException e)
-        {
+        } catch (ConnectException e) {
             log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
-        }
-        catch (SocketTimeoutException e)
-        {
+        } catch (SocketTimeoutException e) {
             log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
-        }
-        catch (IOException e)
-        {
+        } catch (IOException e) {
             log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
         }
         return result.toString();
     }
 
-    private static class TrustAnyTrustManager implements X509TrustManager
-    {
+    private static class TrustAnyTrustManager implements X509TrustManager {
         @Override
-        public void checkClientTrusted(X509Certificate[] chain, String authType)
-        {
+        public void checkClientTrusted(X509Certificate[] chain, String authType) {
         }
 
         @Override
-        public void checkServerTrusted(X509Certificate[] chain, String authType)
-        {
+        public void checkServerTrusted(X509Certificate[] chain, String authType) {
         }
 
         @Override
-        public X509Certificate[] getAcceptedIssuers()
-        {
-            return new X509Certificate[] {};
+        public X509Certificate[] getAcceptedIssuers() {
+            return new X509Certificate[]{};
         }
     }
 
-    private static class TrustAnyHostnameVerifier implements HostnameVerifier
-    {
+    private static class TrustAnyHostnameVerifier implements HostnameVerifier {
         @Override
-        public boolean verify(String hostname, SSLSession session)
-        {
+        public boolean verify(String hostname, SSLSession session) {
             return true;
         }
     }
+
+
+    public static String postFile(String filePath, String url) throws Exception {
+// 创建CloseableHttpClient对象
+        CloseableHttpClient client = HttpClients.createDefault();
+
+        // 创建HttpPost对象并设置URL
+        HttpPost uploadFileRequest = new HttpPost(url);
+
+        // 创建MultipartEntityBuilder对象,添加正文和文件
+        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+        builder.addTextBody("field1", "yes", ContentType.TEXT_PLAIN);
+
+        // Attach the file to the POST
+        File file = new File(filePath);
+        String responseString = "";
+        try {
+            builder.addBinaryBody(
+                    "file",
+                    new FileInputStream(file),
+                    ContentType.APPLICATION_OCTET_STREAM,
+                    encodeText(file.getName()));
+            // Create the multipart entity and set as POST request payload
+            HttpEntity multipart = builder.build();
+            uploadFileRequest.setEntity(multipart);
+            // Execute the request
+            CloseableHttpResponse response = client.execute(uploadFileRequest);
+            HttpEntity responseEntity = response.getEntity();
+
+            // Read the response
+            if (responseEntity != null) {
+                responseString = EntityUtils.toString(responseEntity, "UTF-8");
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return responseString;
+    }
+
+    public static String encodeText(String text) {
+        byte[] bytes = text.getBytes(StandardCharsets.UTF_8);
+        String encodedText = Base64.getEncoder().encodeToString(bytes);
+        return "=?utf-8?B?" + encodedText + "?=";
+    }
+
+    public static String sendsJsonPostTest(String url, String param, HashMap<String, String> headers) throws IOException {
+        if (url == null || param == null) {
+            throw new IllegalArgumentException("URL and parameters cannot be null");
+        }
+
+        HttpsURLConnection conn = null;  // 改为 HttpsURLConnection 类型
+        StringBuilder result = new StringBuilder();
+        SSLContext sc = null;
+        try {
+            sc = SSLContext.getInstance("SSL");
+            sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());
+
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException(e);
+        } catch (KeyManagementException e) {
+            throw new RuntimeException(e);
+        }
+
+        try {
+            URL realUrl = new URL(url);
+            conn = (HttpsURLConnection) realUrl.openConnection();  // 强制转换为 HttpsURLConnection
+
+           /* // 配置 SSL 信任所有证书(仅限测试环境!)
+            configureSSLTrust(conn);
+*/
+            // 设置请求方法
+            conn.setRequestMethod("POST");
+            conn.setSSLSocketFactory(sc.getSocketFactory());
+            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+            // 设置通用请求头
+            conn.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
+            conn.setRequestProperty("Accept", "application/json");
+            headers.remove("Content-Type");
+            headers.forEach(conn::setRequestProperty);
+
+            conn.setDoOutput(true);
+            conn.setDoInput(true);
+            conn.setConnectTimeout(5000);
+            conn.setReadTimeout(10000);
+
+            // 写入请求体
+            try (OutputStream os = conn.getOutputStream();
+                 OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8);
+                 BufferedWriter writer = new BufferedWriter(osw)) {
+                writer.write(param);
+                writer.flush();
+            }
+
+            // 检查 HTTP 状态码
+            int status = conn.getResponseCode();
+            if (status != HttpsURLConnection.HTTP_OK) {
+                throw new IOException("HTTP error code: " + status);
+            }
+
+            // 读取响应
+            try (BufferedReader in = new BufferedReader(
+                    new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8))) {
+                String line;
+                while ((line = in.readLine()) != null) {
+                    result.append(line);
+                }
+            }
+
+            log.info("Request succeeded, response: {}", result);
+        } catch (ConnectException | SocketTimeoutException e) {
+            log.error("Connection error: {}", url, e);
+            throw e;
+        } catch (IOException e) {
+            log.error("I/O error: {}", url, e);
+            throw e;
+        } finally {
+            if (conn != null) {
+                conn.disconnect();
+            }
+        }
+        return result.toString();
+    }
+
+    // 配置 SSL 信任所有证书和 Hostname 验证(仅限测试环境!)
+    /*private static void configureSSLTrust(HttpsURLConnection conn) throws IOException {
+        try {
+            // 创建信任所有证书的 TrustManager
+            TrustManager[] trustAllCerts = new TrustManager[]{
+                    new X509TrustManager() {
+                        public X509Certificate[] getAcceptedIssuers() {
+                            return new X509Certificate;
+                        }
+                        public void checkClientTrusted(X509Certificate[] certs, String authType) {}
+                        public void checkServerTrusted(X509Certificate[] certs, String authType) {}
+                    }
+            };
+
+            // 初始化 SSLContext
+            SSLContext sslContext = SSLContext.getInstance("TLS");
+            sslContext.init(null, trustAllCerts, new SecureRandom());
+
+            // 应用 SSLContext 和 HostnameVerifier
+            conn.setSSLSocketFactory(sslContext.getSocketFactory());
+            conn.setHostnameVerifier((hostname, session) -> true);  // 绕过主机名验证
+
+        } catch (NoSuchAlgorithmException | KeyManagementException e) {
+            throw new IOException("SSL configuration failed", e);
+        }
+    }*/
+
 }