fix(datasource): 修复 zstd 响应 JSON 解析问题
- 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) 成功
This commit is contained in:
@@ -109,7 +109,12 @@ class FlaskAPIDataSource:
|
|||||||
print(f"✗ API请求失败: {response.status_code} - {response.text[:100]}")
|
print(f"✗ API请求失败: {response.status_code} - {response.text[:100]}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
# 尝试解析 JSON(支持 zstd 响应)
|
||||||
|
try:
|
||||||
data = response.json()
|
data = response.json()
|
||||||
|
except (json.JSONDecodeError, requests.exceptions.JSONDecodeError):
|
||||||
|
# 如果 response.json() 失败,手动解析
|
||||||
|
data = json.loads(response.text)
|
||||||
|
|
||||||
# 检查错误
|
# 检查错误
|
||||||
if 'error' in data:
|
if 'error' in data:
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ load_dotenv()
|
|||||||
|
|
||||||
from flask import Flask, request, jsonify
|
from flask import Flask, request, jsonify
|
||||||
from flask_cors import CORS
|
from flask_cors import CORS
|
||||||
|
from flask_compress import Compress
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
from datasource.universal_fetcher import UniversalDataFetcher
|
from datasource.universal_fetcher import UniversalDataFetcher
|
||||||
@@ -52,6 +53,7 @@ from datasource.asset_type_detector import AssetTypeDetector, AssetType
|
|||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
CORS(app) # 启用跨域支持
|
CORS(app) # 启用跨域支持
|
||||||
|
Compress(app) # 启用 gzip 压缩
|
||||||
|
|
||||||
# 全局数据获取器实例
|
# 全局数据获取器实例
|
||||||
fetcher: Optional[UniversalDataFetcher] = None
|
fetcher: Optional[UniversalDataFetcher] = None
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ pysocks>=1.7.0
|
|||||||
# ==================== Web服务 ====================
|
# ==================== Web服务 ====================
|
||||||
flask>=3.0.0
|
flask>=3.0.0
|
||||||
flask-cors>=4.0.0
|
flask-cors>=4.0.0
|
||||||
|
flask-compress>=1.14
|
||||||
|
|
||||||
# ==================== 进度条 ====================
|
# ==================== 进度条 ====================
|
||||||
tqdm>=4.65.0
|
tqdm>=4.65.0
|
||||||
|
|||||||
@@ -121,7 +121,8 @@ class RotationStrategy(StrategyBase):
|
|||||||
raise ValueError("配置中未找到 code_list")
|
raise ValueError("配置中未找到 code_list")
|
||||||
|
|
||||||
# 获取 Flask API 地址
|
# 获取 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:
|
if use_flask_api:
|
||||||
# 使用 Flask API 服务获取数据(远程调用)
|
# 使用 Flask API 服务获取数据(远程调用)
|
||||||
|
|||||||
Reference in New Issue
Block a user