From 4a0f9887cb8d5245c8d157b156a87f24f8e01ca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8D=92?= Date: Wed, 5 Nov 2025 23:46:16 +0800 Subject: [PATCH] 1 --- .../ruoyi/jarvis/util/TencentDocApiUtil.java | 94 +++++++++++++++++-- 1 file changed, 87 insertions(+), 7 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/util/TencentDocApiUtil.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/util/TencentDocApiUtil.java index 81b735c..6c80719 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/util/TencentDocApiUtil.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/util/TencentDocApiUtil.java @@ -42,10 +42,49 @@ public class TencentDocApiUtil { params.append("&code=").append(code); params.append("&redirect_uri=").append(java.net.URLEncoder.encode(redirectUri, "UTF-8")); - String response = HttpUtils.sendPost(tokenUrl, params.toString()); - log.info("获取访问令牌响应: {}", response); + // 直接使用HttpURLConnection,不使用代理,避免被nginx拦截 + URL url = new URL(tokenUrl); + java.net.Proxy proxy = java.net.Proxy.NO_PROXY; + HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + conn.setRequestProperty("Accept", "application/json"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setConnectTimeout(10000); + conn.setReadTimeout(30000); - return JSON.parseObject(response); + // 写入请求参数 + try (OutputStream os = conn.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8)) { + osw.write(params.toString()); + osw.flush(); + } + + // 读取响应 + int statusCode = conn.getResponseCode(); + BufferedReader reader; + if (statusCode >= 200 && statusCode < 300) { + reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + } else { + reader = new BufferedReader(new InputStreamReader(conn.getErrorStream(), StandardCharsets.UTF_8)); + } + + StringBuilder response = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + reader.close(); + + String responseStr = response.toString(); + log.info("获取访问令牌响应: statusCode={}, response={}", statusCode, responseStr); + + if (statusCode < 200 || statusCode >= 300) { + throw new RuntimeException("获取访问令牌失败: HTTP " + statusCode + ", response=" + responseStr); + } + + return JSON.parseObject(responseStr); } catch (Exception e) { log.error("获取访问令牌失败", e); throw new RuntimeException("获取访问令牌失败: " + e.getMessage(), e); @@ -70,10 +109,49 @@ public class TencentDocApiUtil { params.append("&client_secret=").append(appSecret); params.append("&refresh_token=").append(refreshToken); - String response = HttpUtils.sendPost(refreshTokenUrl, params.toString()); - log.info("刷新访问令牌响应: {}", response); + // 直接使用HttpURLConnection,不使用代理,避免被nginx拦截 + URL url = new URL(refreshTokenUrl); + java.net.Proxy proxy = java.net.Proxy.NO_PROXY; + HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); + conn.setRequestMethod("POST"); + conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + conn.setRequestProperty("Accept", "application/json"); + conn.setDoOutput(true); + conn.setDoInput(true); + conn.setConnectTimeout(10000); + conn.setReadTimeout(30000); - return JSON.parseObject(response); + // 写入请求参数 + try (OutputStream os = conn.getOutputStream(); + OutputStreamWriter osw = new OutputStreamWriter(os, StandardCharsets.UTF_8)) { + osw.write(params.toString()); + osw.flush(); + } + + // 读取响应 + int statusCode = conn.getResponseCode(); + BufferedReader reader; + if (statusCode >= 200 && statusCode < 300) { + reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), StandardCharsets.UTF_8)); + } else { + reader = new BufferedReader(new InputStreamReader(conn.getErrorStream(), StandardCharsets.UTF_8)); + } + + StringBuilder response = new StringBuilder(); + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + reader.close(); + + String responseStr = response.toString(); + log.info("刷新访问令牌响应: statusCode={}, response={}", statusCode, responseStr); + + if (statusCode < 200 || statusCode >= 300) { + throw new RuntimeException("刷新访问令牌失败: HTTP " + statusCode + ", response=" + responseStr); + } + + return JSON.parseObject(responseStr); } catch (Exception e) { log.error("刷新访问令牌失败", e); throw new RuntimeException("刷新访问令牌失败: " + e.getMessage(), e); @@ -92,7 +170,9 @@ public class TencentDocApiUtil { public static JSONObject callApi(String accessToken, String apiUrl, String method, String body) { try { URL url = new URL(apiUrl); - HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + // 使用Proxy.NO_PROXY确保不使用系统代理,直接连接到腾讯文档API + java.net.Proxy proxy = java.net.Proxy.NO_PROXY; + HttpURLConnection conn = (HttpURLConnection) url.openConnection(proxy); conn.setRequestMethod(method); conn.setRequestProperty("Authorization", "Bearer " + accessToken); conn.setRequestProperty("Content-Type", "application/json");