From 7d9c7ef573709924fc20970ab38987b693f09ca5 Mon Sep 17 00:00:00 2001 From: "mark.tian" Date: Wed, 3 Dec 2025 12:13:01 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=A4=B4=E5=92=8C=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E4=BD=93=E6=94=B9=E4=B8=BA=E7=94=A8=E5=8E=9F=E5=A7=8B?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E9=87=8C=E9=9D=A2=E7=9A=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 2 +- app/routes.py | 60 ++++++++++++++++++++++++--------------------------- 2 files changed, 29 insertions(+), 33 deletions(-) diff --git a/.env b/.env index 1355a51..fa1ff81 100644 --- a/.env +++ b/.env @@ -9,7 +9,7 @@ REDIS_LOCK_MAX_RETRIES=100 # 业务配置 COUNT_THRESHOLD=3 -EXTERNAL_API_ENABLED=false +EXTERNAL_API_ENABLED=true EXTERNAL_API_RETRY_MAX=3 EXTERNAL_API_URL=https://127.0.0.1/api/openapi/customerApi/aiTaskResultFail diff --git a/app/routes.py b/app/routes.py index 7611555..308e47e 100644 --- a/app/routes.py +++ b/app/routes.py @@ -36,54 +36,50 @@ async def log_callback_request( server_ip = server_host server_port = server_port_info - # 准备请求头信息(过滤敏感信息) + # 准备请求头信息(直接记录原始请求头) request_headers = dict(request.headers) - safe_headers = {} - sensitive_headers = {'authorization', 'token', 'api-key', 'x-api-key', 'cookie'} - for key, value in request_headers.items(): - if key.lower() in sensitive_headers: - safe_headers[key] = "***REDACTED***" - else: - safe_headers[key] = value - - # 准备请求体信息 - request_body = callback_data.model_dump() + # 获取原始请求体 + import json as json_module + try: + # 获取原始请求体字节并解码为字符串 + body_bytes = await request.body() + body_str = body_bytes.decode('utf-8') + # 尝试解析为JSON对象,如果失败则使用原始字符串 + try: + request_body = json_module.loads(body_str) + except json_module.JSONDecodeError: + request_body = body_str + except Exception as e: + logger.warning(f"⚠️ 读取请求体失败: {e}") + request_body = "Unable to read request body" # 记录请求URL(JSON格式) - logger.info(f"🌐 请求URL: {json.dumps(str(request.url), ensure_ascii=False)}") + logger.info(f"🌐 请求URL: {request.url}") # 记录site_id(JSON格式) - logger.info(f"📝 site_id: {json.dumps(site_id, ensure_ascii=False)}") + logger.info(f"📝 site_id: {site_id}") - # 记录请求头(JSON格式) - logger.info(f"📋 请求头: {json.dumps(safe_headers, ensure_ascii=False, indent=2)}") - - # 记录请求体(JSON格式) - logger.info(f"📄 请求体: {json.dumps(request_body, ensure_ascii=False, indent=2)}") - - # 记录server_ip(JSON格式) + # 记录server_ip(JSON格式) server_info = { "ip": server_ip, "port": server_port } - logger.info(f"🏠 server_ip: {json.dumps(server_info, ensure_ascii=False)}") + logger.info(f"🏠 server_ip: {server_info}") # 记录client_ip(JSON格式) client_info = { "ip": client_ip, "port": client_port } - logger.info(f"🖥️ client_ip: {json.dumps(client_info, ensure_ascii=False)}") - - # 记录callback_data(JSON格式) - callback_data_json = { - "count": callback_data.count, - "data_count": len(callback_data.data) if callback_data.data else 0, - "data_sample": callback_data.data[0].model_dump() if callback_data.data else None - } - logger.info(f"📦 callback_data: {json.dumps(callback_data_json, ensure_ascii=False, indent=2)}") + logger.info(f"🖥️ client_ip: {client_info}") + + # 记录请求头(JSON格式) + logger.info(f"📋 请求头: {json.dumps(request_headers, ensure_ascii=False, indent=2)}") + # 记录请求体(JSON格式) + logger.info(f"📄 请求体: {json.dumps(request_body, ensure_ascii=False, indent=2)}") + try: # 保存到数据库 callback_log = CallbackLog( @@ -91,8 +87,8 @@ async def log_callback_request( remote_address=f"{client_ip}:{client_port}" if client_ip and client_port else client_ip, server_ip=f"{server_ip}:{server_port}" if server_ip and server_port else server_ip, request_url=str(request.url), - request_headers=safe_headers, # 保存过滤后的请求头 - request_body=request_body + request_headers=request_headers, # 保存原始请求头 + request_body=request_body # 保存从request.body获取的原始请求体 ) db.add(callback_log)