From cf1d82548a1bd8155ffe9b486df8167aa9e63a7d Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期四, 02 七月 2026 09:19:06 +0800
Subject: [PATCH] 功能开发

---
 server/services/src/main/java/com/doumee/core/douyin/DouyinClient.java |   54 +++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 45 insertions(+), 9 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/core/douyin/DouyinClient.java b/server/services/src/main/java/com/doumee/core/douyin/DouyinClient.java
index 8f7b418..460e443 100644
--- a/server/services/src/main/java/com/doumee/core/douyin/DouyinClient.java
+++ b/server/services/src/main/java/com/doumee/core/douyin/DouyinClient.java
@@ -27,6 +27,7 @@
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
+import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLDecoder;
@@ -277,15 +278,50 @@
             return objectId;
         }
         try {
-            HttpURLConnection conn = (HttpURLConnection) new URL(input).openConnection();
-            conn.setInstanceFollowRedirects(true);
-            conn.setRequestMethod("GET");
-            conn.setConnectTimeout(5000);
-            conn.setReadTimeout(5000);
-            conn.connect();
-            String finalUrl = conn.getURL().toString();
-            conn.disconnect();
-            return extractObjectId(finalUrl);
+            // 鎵嬪姩璺熼殢閲嶅畾鍚�:HttpURLConnection 鑷姩閲嶅畾鍚戜笉璺ㄥ崗璁�(http鈫攈ttps)涓� getURL() 鏇存柊涓嶇ǔ瀹�,
+            // 鏀逛负閫愯烦璇诲彇 Location 澶�,鏈�缁堜粠钀藉湴闀块摼閲屾彁鍙� object_id
+            String current = input;
+            int maxRedirects = 5;
+            for (int i = 0; i < maxRedirects; i++) {
+                HttpURLConnection conn = (HttpURLConnection) new URL(current).openConnection();
+                conn.setInstanceFollowRedirects(false); // 鎵嬪姩璺熼殢
+                conn.setRequestMethod("GET");
+                conn.setRequestProperty("User-Agent", "Mozilla/5.0");
+                conn.setConnectTimeout(5000);
+                conn.setReadTimeout(5000);
+                int code = conn.getResponseCode();
+                String location = conn.getHeaderField("Location");
+                // 蹇呴』璇诲彇骞跺叧闂敊璇�/杈撳叆娴�,鍚﹀垯杩炴帴璧勬簮娉勬紡
+                try (InputStream is = (code >= 400) ? conn.getErrorStream() : conn.getInputStream()) {
+                    if (is != null) {
+                        // 涓嶉渶瑕佸唴瀹�,浠呮秷璐规祦浠ラ噴鏀捐繛鎺�
+                        byte[] buf = new byte[1024];
+                        while (is.read(buf) > 0) {
+                            // drain
+                        }
+                    }
+                }
+                if (code == HttpURLConnection.HTTP_MOVED_PERM
+                        || code == HttpURLConnection.HTTP_MOVED_TEMP
+                        || code == HttpURLConnection.HTTP_SEE_OTHER
+                        || code == 307 || code == 308) {
+                    if (StringUtils.isBlank(location)) {
+                        // 閲嶅畾鍚戜絾鏃� Location,鏃犳硶缁х画
+                        return null;
+                    }
+                    current = location;
+                    continue;
+                }
+                // 闈為噸瀹氬悜:鐢ㄦ渶缁� URL 鎻愬彇 object_id
+                String resolved = location != null ? location : conn.getURL().toString();
+                objectId = extractObjectId(resolved);
+                if (objectId == null) {
+                    log.warn("瑙f瀽鎶栭煶鐭摼鏈彁鍙栧埌 object_id,input={},final={}", input, resolved);
+                }
+                return objectId;
+            }
+            log.warn("瑙f瀽鎶栭煶鐭摼瓒呰繃鏈�澶ч噸瀹氬悜娆℃暟,input={}", input);
+            return null;
         } catch (Exception e) {
             log.error("瑙f瀽鎶栭煶鐭摼寮傚父:{}", input, e);
             return null;

--
Gitblit v1.9.3