Commit
·
2e4a225
1
Parent(s):
04860cd
feat: 格式化记录 JSON POST 请求体
Browse files- 尝试将 POST 请求体解析为 JSON
- 如果成功,使用缩进格式化后记录
- 如果失败或非 UTF-8,按原格式记录
app.py
CHANGED
@@ -4,6 +4,7 @@ from fastapi.responses import StreamingResponse
|
|
4 |
import uvicorn
|
5 |
import os
|
6 |
import logging # 添加 logging 导入
|
|
|
7 |
|
8 |
# 配置日志记录
|
9 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
@@ -48,15 +49,22 @@ async def reverse_proxy(request: Request, path: str):
|
|
48 |
|
49 |
# 如果是 POST 请求,记录请求体内容
|
50 |
if request.method == "POST":
|
|
|
51 |
try:
|
52 |
-
# 尝试解码为 UTF-8
|
53 |
body_text = body.decode('utf-8')
|
54 |
-
|
55 |
-
|
56 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
57 |
except UnicodeDecodeError:
|
58 |
# 如果解码失败,记录原始字节信息
|
59 |
-
logging.info(f"
|
60 |
|
61 |
try:
|
62 |
# 发送请求到目标服务器,允许重定向,不验证 SSL 证书(在某些情况下可能需要)
|
|
|
4 |
import uvicorn
|
5 |
import os
|
6 |
import logging # 添加 logging 导入
|
7 |
+
import json # 添加 json 导入
|
8 |
|
9 |
# 配置日志记录
|
10 |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
|
|
49 |
|
50 |
# 如果是 POST 请求,记录请求体内容
|
51 |
if request.method == "POST":
|
52 |
+
logging.info(f"Received POST request to {path}. Body follows:")
|
53 |
try:
|
54 |
+
# 尝试解码为 UTF-8 文本
|
55 |
body_text = body.decode('utf-8')
|
56 |
+
try:
|
57 |
+
# 尝试将文本解析为 JSON
|
58 |
+
body_json = json.loads(body_text)
|
59 |
+
# 如果成功,格式化 JSON 并记录
|
60 |
+
formatted_json = json.dumps(body_json, indent=2, ensure_ascii=False) # indent=2 用于缩进,ensure_ascii=False 支持中文
|
61 |
+
logging.info(formatted_json)
|
62 |
+
except json.JSONDecodeError:
|
63 |
+
# 如果不是有效的 JSON,按原样记录文本(已包含换行处理)
|
64 |
+
logging.info(body_text)
|
65 |
except UnicodeDecodeError:
|
66 |
# 如果解码失败,记录原始字节信息
|
67 |
+
logging.info(f"Body (bytes): {body}")
|
68 |
|
69 |
try:
|
70 |
# 发送请求到目标服务器,允许重定向,不验证 SSL 证书(在某些情况下可能需要)
|