From 4fe21a7cd4cc2b7423127022c34bbb70a33b2e60 Mon Sep 17 00:00:00 2001 From: aszerW Date: Thu, 14 May 2026 00:27:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(datasource):=20=E4=BF=AE=E5=A4=8D=20zstd=20?= =?UTF-8?q?=E5=93=8D=E5=BA=94=20JSON=20=E8=A7=A3=E6=9E=90=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - flask_api_source.py: 添加 requests.exceptions.JSONDecodeError 捕获 - flask_server.py: 启用 flask-compress gzip 压缩 - requirements.txt: 添加 flask-compress>=1.14 - strategy.py: 修复 flask_api 配置读取方式 问题原因:Traefik Ingress 使用 zstd 压缩响应, requests.response.json() 解析失败,但 json.loads(response.text) 成功 --- datasource/flask_api_source.py | 7 ++++++- datasource/flask_server.py | 2 ++ requirements.txt | 1 + strategies/rotation/strategy.py | 3 ++- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/datasource/flask_api_source.py b/datasource/flask_api_source.py index affb542..254ab0e 100644 --- a/datasource/flask_api_source.py +++ b/datasource/flask_api_source.py @@ -109,7 +109,12 @@ class FlaskAPIDataSource: print(f"✗ API请求失败: {response.status_code} - {response.text[:100]}") return None - data = response.json() + # 尝试解析 JSON(支持 zstd 响应) + try: + data = response.json() + except (json.JSONDecodeError, requests.exceptions.JSONDecodeError): + # 如果 response.json() 失败,手动解析 + data = json.loads(response.text) # 检查错误 if 'error' in data: diff --git a/datasource/flask_server.py b/datasource/flask_server.py index 7c6a94b..d0697d1 100644 --- a/datasource/flask_server.py +++ b/datasource/flask_server.py @@ -40,6 +40,7 @@ load_dotenv() from flask import Flask, request, jsonify from flask_cors import CORS +from flask_compress import Compress import pandas as pd from datasource.universal_fetcher import UniversalDataFetcher @@ -52,6 +53,7 @@ from datasource.asset_type_detector import AssetTypeDetector, AssetType app = Flask(__name__) CORS(app) # 启用跨域支持 +Compress(app) # 启用 gzip 压缩 # 全局数据获取器实例 fetcher: Optional[UniversalDataFetcher] = None diff --git a/requirements.txt b/requirements.txt index 3a05503..f97ae96 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,6 +18,7 @@ pysocks>=1.7.0 # ==================== Web服务 ==================== flask>=3.0.0 flask-cors>=4.0.0 +flask-compress>=1.14 # ==================== 进度条 ==================== tqdm>=4.65.0 diff --git a/strategies/rotation/strategy.py b/strategies/rotation/strategy.py index cf6b103..5b1ca40 100644 --- a/strategies/rotation/strategy.py +++ b/strategies/rotation/strategy.py @@ -121,7 +121,8 @@ class RotationStrategy(StrategyBase): raise ValueError("配置中未找到 code_list") # 获取 Flask API 地址 - flask_api_url = self.config.get('flask_api_url') + flask_api_config = self.config.get('flask_api', {}) + flask_api_url = flask_api_config.get('url') if flask_api_config.get('enabled') else None if use_flask_api: # 使用 Flask API 服务获取数据(远程调用)