调试:添加 IoT 回调请求详细日志,排查 body 为空问题
This commit is contained in:
@@ -40,24 +40,38 @@ class SyncStatusRequest(BaseModel):
|
||||
|
||||
async def _parse_body(request: Request) -> dict:
|
||||
"""兼容解析请求体:JSON / form / query params"""
|
||||
# 1. 尝试 JSON
|
||||
try:
|
||||
body = await request.body()
|
||||
if body:
|
||||
return json.loads(body)
|
||||
except Exception:
|
||||
pass
|
||||
content_type = request.headers.get("content-type", "")
|
||||
logger.info(f"IoT请求调试: method={request.method}, content-type={content_type}, url={request.url}")
|
||||
|
||||
# 2. 尝试 form data
|
||||
try:
|
||||
form = await request.form()
|
||||
if form:
|
||||
return dict(form)
|
||||
except Exception:
|
||||
pass
|
||||
# 1. 读取原始 body
|
||||
raw_body = await request.body()
|
||||
logger.info(f"IoT请求调试: raw_body_len={len(raw_body)}, raw_body={raw_body[:500]}")
|
||||
|
||||
# 3. 降级到 query params
|
||||
return dict(request.query_params)
|
||||
# 2. 尝试 JSON 解析
|
||||
if raw_body:
|
||||
try:
|
||||
return json.loads(raw_body)
|
||||
except Exception as e:
|
||||
logger.warning(f"JSON解析失败: {e}")
|
||||
|
||||
# 3. 尝试 form 解析(需要重新构造 body,因为上面已经读过了)
|
||||
if raw_body and "form" in content_type:
|
||||
try:
|
||||
from urllib.parse import parse_qs
|
||||
params = parse_qs(raw_body.decode("utf-8"))
|
||||
return {k: v[0] if len(v) == 1 else v for k, v in params.items()}
|
||||
except Exception as e:
|
||||
logger.warning(f"Form解析失败: {e}")
|
||||
|
||||
# 4. 降级到 query params
|
||||
qp = dict(request.query_params)
|
||||
if qp:
|
||||
logger.info(f"使用query params: {qp}")
|
||||
return qp
|
||||
|
||||
# 5. 尝试从 headers 中找数据(某些客户端可能这么做)
|
||||
logger.warning(f"所有解析方式均无数据,headers={dict(request.headers)}")
|
||||
return {}
|
||||
|
||||
|
||||
@router.post("/send-card")
|
||||
|
||||
Reference in New Issue
Block a user