收敛864登录态切换异常与日志噪音
This commit is contained in:
@@ -64,7 +64,19 @@ class Server864APIClientBase:
|
||||
params=merged_params,
|
||||
json=json_body,
|
||||
) as response:
|
||||
payload = await response.json(content_type=None)
|
||||
try:
|
||||
payload = await response.json(content_type=None)
|
||||
except Exception:
|
||||
raw_text = await response.text()
|
||||
# 864 少数接口会直接返回纯文本而不是标准 DTO:
|
||||
# 1. 当前已在 `LogOut` 链路里碰到这种情况,旧逻辑会先炸 JSON 解析,再把真正状态信息吞掉;
|
||||
# 2. 对 2xx 响应来说,这通常只是“接口风格不统一”,不应该直接视为致命协议错误;
|
||||
# 3. 因此这里统一包成兼容 DTO,保留原始文本给上层按需处理。
|
||||
payload = {
|
||||
"Code": 200 if response.status < 400 else response.status,
|
||||
"Data": None,
|
||||
"Text": str(raw_text or "").strip(),
|
||||
}
|
||||
return self._validate_payload(payload)
|
||||
|
||||
async def _request_data(
|
||||
@@ -96,6 +108,12 @@ class Server864APIClientBase:
|
||||
return payload
|
||||
|
||||
message = str(payload.get("Text") or payload.get("Message") or "server_864 请求失败").strip()
|
||||
# 864 某些登录接口会用非 200 编码表达“当前 key 已经在线”:
|
||||
# 1. 对二维码申请链路来说,这更接近一种状态回执,而不是硬失败;
|
||||
# 2. 如果这里直接抛异常,上层就会把“已经在线”误判成致命错误并退出线程;
|
||||
# 3. 因此先保留 payload 原样放行,让 runtime 再决定是复用现有登录态还是继续走扫码。
|
||||
if "该链接已绑定微信号" in message and "在线状态良好" in message:
|
||||
return payload
|
||||
lowered_message = message.lower()
|
||||
if any(keyword in lowered_message for keyword in ("重新登录", "已退出登录", "离线", "账号需要重新登录")):
|
||||
raise UserLoggedOut(message)
|
||||
|
||||
Reference in New Issue
Block a user