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 ? - +