From 38291612d417fefa096eecc7c795f5e0279ed11d Mon Sep 17 00:00:00 2001
From: lsh <lsh@163.com>
Date: 星期四, 13 十一月 2025 15:22:16 +0800
Subject: [PATCH] *

---
 src/main/java/com/zy/common/utils/HttpHandler.java |   87 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 71 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/HttpHandler.java b/src/main/java/com/zy/common/utils/HttpHandler.java
index 70adcc7..87814c9 100644
--- a/src/main/java/com/zy/common/utils/HttpHandler.java
+++ b/src/main/java/com/zy/common/utils/HttpHandler.java
@@ -1,8 +1,6 @@
 package com.zy.common.utils;
 
-
 import okhttp3.*;
-
 import java.io.IOException;
 import java.util.Map;
 import java.util.Optional;
@@ -16,7 +14,8 @@
 public class HttpHandler {
 
     private static final Integer DEFAULT_TIMEOUT_SECONDS = 5;
-    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json;charset=utf-8");
+    private static final MediaType MEDIA_TYPE_JSON = MediaType.parse("application/json;charset=utf-8");
+    private static final MediaType MEDIA_TYPE_FORM = MediaType.parse("application/x-www-form-urlencoded;charset=utf-8");
 
     private String uri;
     private String path;
@@ -26,6 +25,7 @@
     private boolean https;
     private Integer timeout;
     private TimeUnit timeUnit;
+    private boolean useFormUrlEncoded; // 鏂板锛氭爣璇嗘槸鍚︿娇鐢▁-www-form-urlencoded鏍煎紡
 
     public HttpHandler(Builder builder){
         this.uri = builder.uri;
@@ -36,6 +36,7 @@
         this.https = builder.https;
         this.timeout = builder.timeout;
         this.timeUnit = builder.timeUnit;
+        this.useFormUrlEncoded = builder.useFormUrlEncoded; // 鏂板
     }
 
     /**
@@ -62,32 +63,80 @@
     public String doPost() throws IOException {
         Request request;
         Request.Builder headerBuilder = new Request.Builder();
+
+        // 璁剧疆璇锋眰澶�
         if (headers != null && headers.size()>0){
             for (Map.Entry<String, Object> entry : headers.entrySet()){
                 headerBuilder.addHeader(entry.getKey(), String.valueOf(entry.getValue()));
             }
         }
-        if (json == null || "".equals(json)){
-            FormBody.Builder builder = new FormBody.Builder();
-            for (Map.Entry<String, Object> entry : params.entrySet()){
-                builder.add(entry.getKey(), String.valueOf(entry.getValue()));
+
+        // 鏍规嵁useFormUrlEncoded鏍囧織閫夋嫨璇锋眰浣撴牸寮�
+        if (useFormUrlEncoded) {
+            // 浣跨敤x-www-form-urlencoded鏍煎紡[1,2,6](@ref)
+            FormBody.Builder formBuilder = new FormBody.Builder();
+
+            if (params != null && !params.isEmpty()) {
+                // 娣诲姞琛ㄥ崟鍙傛暟[2,6,7](@ref)
+                for (Map.Entry<String, Object> entry : params.entrySet()) {
+                    formBuilder.add(entry.getKey(), String.valueOf(entry.getValue()));
+                }
+            } else if (json != null && !json.isEmpty()) {
+                // 濡傛灉鎻愪緵浜唈son瀛楃涓诧紝灏濊瘯瑙f瀽涓洪敭鍊煎锛堢畝鍗曞疄鐜帮級
+                // 娉ㄦ剰锛氳繖閲岄渶瑕佹牴鎹疄闄呮儏鍐佃皟鏁磈son瑙f瀽閫昏緫
+                String formattedParams = parseJsonToFormData(json);
+                if (formattedParams != null) {
+                    String[] pairs = formattedParams.split("&");
+                    for (String pair : pairs) {
+                        String[] keyValue = pair.split("=", 2);
+                        if (keyValue.length == 2) {
+                            formBuilder.add(keyValue[0], keyValue[1]);
+                        }
+                    }
+                }
             }
-            FormBody body = builder.build();
+
+            FormBody formBody = formBuilder.build();
             request = headerBuilder
                     .url((https?"https://":"http://")+uri+path)
-                    .post(body)
+                    .post(formBody)
                     .build();
         } else {
-            RequestBody body = RequestBody.create(MEDIA_TYPE, json);
-            Request.Builder builder = headerBuilder.url((https?"https://":"http://")+uri+path);
-            builder.header("Content-Type", "application/json;charset=UTF-8");
-            request = builder.post(body).build();
-
+            // 鍘熸湁鐨凧SON鏍煎紡澶勭悊
+            if (json == null || "".equals(json)){
+                FormBody.Builder builder = new FormBody.Builder();
+                for (Map.Entry<String, Object> entry : params.entrySet()){
+                    builder.add(entry.getKey(), String.valueOf(entry.getValue()));
+                }
+                FormBody body = builder.build();
+                request = headerBuilder
+                        .url((https?"https://":"http://")+uri+path)
+                        .post(body)
+                        .build();
+            } else {
+                RequestBody body = RequestBody.create(MEDIA_TYPE_JSON, json);
+                Request.Builder builder = headerBuilder.url((https?"https://":"http://")+uri+path);
+                builder.header("Content-Type", "application/json;charset=UTF-8");
+                request = builder.post(body).build();
+            }
         }
+
         Call call = getClient(timeout, timeUnit).newCall(request);
         Response response = call.execute();
         return response.body().string();
+    }
 
+    /**
+     * 灏咼SON瀛楃涓茶浆鎹负琛ㄥ崟鏁版嵁鏍煎紡锛堢畝鏄撳疄鐜帮級
+     * @param json JSON瀛楃涓�
+     * @return 琛ㄥ崟鏁版嵁瀛楃涓�
+     */
+    private String parseJsonToFormData(String json) {
+        // 绠�鏄撳疄鐜帮細绉婚櫎JSON鐨勫ぇ鎷彿鍜屽紩鍙凤紝鏇挎崲鍐掑彿涓虹瓑鍙凤紝閫楀彿涓�&
+        // 娉ㄦ剰锛氬浜庡鏉侸SON闇�瑕佹洿瀹屽杽鐨勮В鏋愰�昏緫
+        return json.replaceAll("[{}\"]", "")
+                .replaceAll(":", "=")
+                .replaceAll(",", "&");
     }
 
     /**
@@ -145,12 +194,14 @@
         private boolean https;
         private Integer timeout;
         private TimeUnit timeUnit;
+        private boolean useFormUrlEncoded; // 鏂板锛氭爣璇嗘槸鍚︿娇鐢▁-www-form-urlencoded鏍煎紡
 
         {
             // 榛樿5s瓒呮椂
             timeout = DEFAULT_TIMEOUT_SECONDS;
             timeUnit = TimeUnit.SECONDS;
             path = "";
+            useFormUrlEncoded = false; // 榛樿浣跨敤JSON鏍煎紡
         }
 
         /**
@@ -208,6 +259,10 @@
             return this;
         }
 
+        // 鏂板鏂规硶锛氳缃娇鐢▁-www-form-urlencoded鏍煎紡
+        public Builder setUseFormUrlEncoded(boolean useFormUrlEncoded) {
+            this.useFormUrlEncoded = useFormUrlEncoded;
+            return this;
+        }
     }
-
-}
+}
\ No newline at end of file

--
Gitblit v1.9.1