From 8255d0b32302742cb1b06b58c367e8f76f5d6d76 Mon Sep 17 00:00:00 2001
From: Chenyme <118253778+chenyme@users.noreply.github.com>
Date: Thu, 16 Oct 2025 13:33:45 +0800
Subject: [PATCH 01/43] feat: use socks5h proxy
---
app/core/config.py | 10 +++++++++-
app/services/grok/cache.py | 3 +++
app/services/grok/client.py | 20 +++++++++-----------
app/services/grok/token.py | 3 +++
app/services/grok/upload.py | 4 ++++
app/template/admin.html | 2 +-
6 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/app/core/config.py b/app/core/config.py
index 01226f7..f307bb6 100644
--- a/app/core/config.py
+++ b/app/core/config.py
@@ -25,7 +25,15 @@ class ConfigManager:
"""配置加载器"""
try:
with open(self.config_path, "r", encoding="utf-8") as f:
- return toml.load(f)[section]
+ config = toml.load(f)[section]
+
+ # 自动将 SOCKS5 转换为 SOCKS5H
+ if section == "grok" and "proxy_url" in config:
+ proxy_url = config["proxy_url"]
+ if proxy_url and proxy_url.startswith("socks5://"):
+ config["proxy_url"] = proxy_url.replace("socks5://", "socks5h://", 1)
+
+ return config
except Exception as e:
raise Exception(f"[Setting] 配置加载失败: {e}")
diff --git a/app/services/grok/cache.py b/app/services/grok/cache.py
index d9d9220..5446ced 100644
--- a/app/services/grok/cache.py
+++ b/app/services/grok/cache.py
@@ -48,6 +48,9 @@ class CacheService:
proxy_url = setting.grok_config.get("proxy_url")
proxies = {"http": proxy_url, "https": proxy_url} if proxy_url else {}
+
+ if proxy_url:
+ logger.debug(f"[{self.cache_type.upper()}Cache] 使用代理: {proxy_url.split('@')[-1] if '@' in proxy_url else proxy_url}")
async with AsyncSession() as session:
logger.debug(f"[{self.cache_type.upper()}Cache] 开始下载: https://assets.grok.com{file_path}")
diff --git a/app/services/grok/client.py b/app/services/grok/client.py
index b275308..ef5b4b7 100644
--- a/app/services/grok/client.py
+++ b/app/services/grok/client.py
@@ -146,9 +146,15 @@ class GrokClient:
raise GrokApiException("认证令牌缺失", "NO_AUTH_TOKEN")
try:
- # 构建请求头和代理
+ # 构建请求头
headers = GrokClient._build_headers(auth_token)
- proxy_config = GrokClient._get_proxy()
+
+ # 获取代理配置
+ proxy_url = setting.grok_config.get("proxy_url", "")
+ proxies = {"http": proxy_url, "https": proxy_url} if proxy_url else None
+
+ if proxy_url:
+ logger.debug(f"[Client] 使用代理: {proxy_url.split('@')[-1] if '@' in proxy_url else proxy_url}")
# 构建请求参数
request_kwargs = {
@@ -157,7 +163,7 @@ class GrokClient:
"impersonate": IMPERSONATE_BROWSER,
"timeout": REQUEST_TIMEOUT,
"stream": True,
- "proxies": proxy_config if proxy_config else None
+ "proxies": proxies
}
# 在线程池中执行同步HTTP请求,避免阻塞事件循环
@@ -200,14 +206,6 @@ class GrokClient:
return headers
- @staticmethod
- def _get_proxy() -> Dict[str, str]:
- """获取代理配置"""
- proxy_url = setting.grok_config.get("proxy_url", "")
- if proxy_url:
- return {"http": proxy_url, "https": proxy_url}
- return {}
-
@staticmethod
def _handle_error(response, auth_token: str):
"""处理错误响应"""
diff --git a/app/services/grok/token.py b/app/services/grok/token.py
index a8678b0..ac62222 100644
--- a/app/services/grok/token.py
+++ b/app/services/grok/token.py
@@ -258,6 +258,9 @@ class GrokTokenManager:
# 获取代理配置
proxy_url = setting.grok_config.get("proxy_url", "")
proxies = {"http": proxy_url, "https": proxy_url} if proxy_url else None
+
+ if proxy_url:
+ logger.debug(f"[Token] 使用代理: {proxy_url.split('@')[-1] if '@' in proxy_url else proxy_url}")
# 发送异步请求
async with AsyncSession() as session:
diff --git a/app/services/grok/upload.py b/app/services/grok/upload.py
index f5f92b3..c7ee7de 100644
--- a/app/services/grok/upload.py
+++ b/app/services/grok/upload.py
@@ -61,7 +61,11 @@ class ImageUploadManager:
cf_clearance = setting.grok_config.get("cf_clearance", "")
cookie = f"{auth_token};{cf_clearance}" if cf_clearance else auth_token
+
proxy_url = setting.grok_config.get("proxy_url", "")
+ if proxy_url:
+ logger.debug(f"[Upload] 使用代理: {proxy_url.split('@')[-1] if '@' in proxy_url else proxy_url}")
+
proxies = {"http": proxy_url, "https": proxy_url} if proxy_url else None
# 发送异步请求
diff --git a/app/template/admin.html b/app/template/admin.html
index 41e850d..190505e 100644
--- a/app/template/admin.html
+++ b/app/template/admin.html
@@ -378,7 +378,7 @@
Proxy Url
?
-
+