做了什么 - 新增 scripts/check_real_tencent_aid.py: 用**可反复测**的真实 aid 回归纯算链路 (默认 aid=190758559 / mliev.login.wang 短信登录; 也可 --aid 195672344 对照)。 - 账本 har/1ms_dianxuan/PROGRESS.md: 已知 #26~#28、已排除新增三行、下一步重写为"已闭合结论 + 可复现靶子"。 为什么 (AGENTS §2.1 第 0 问 / §5.7) - 用户提供可重复的真机登录抓包 har/原始抓包/登录抓包-点选.har, 得以把"12 到底是不是我们的问题" 用一个能成功的目标做单变量反证。 怎么验证 (2026-10-11 实测) - aid 190758559: 本客户端 solve() => errorCode=0 + 真 ticket, 连续 4 次: tr03lxdviLWtn4uXGjWjmrLQ / tr03A5zTSQ9bCog51sDm / tr039KeeQxXX-OdduJoY / tr03fGUOpcJTZWXWmZG7Uioc0Y8GlHPn 其中 **httpx + 无 cookie + 无任何头部保真** 也拿到 0 —— 证明纯算链路本就完好。 - aid 195672344 (1ms): 在 cookie / curl_cffi Chrome 指纹 / 逐 endpoint 头保真 / collect 内容 逐字节同构 / 带签名 identity_context 先行注册 —— 全部仍 12。 - 结论: 1ms 的 12 是该 aid 自身风控不放行"非真机页面"会话; 请求侧已无自变量, 纯协议侧无解, 只能真机桥接或换入口。
68 lines
2.7 KiB
Python
68 lines
2.7 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
真机 aid 冒烟测试 —— 用**可反复测**的真实 aid 回归"纯算链路是否完好"。
|
|
|
|
背景 (har/1ms_dianxuan/PROGRESS.md 已知 #26/#27):
|
|
aid 195672344 (1ms.run) 对本客户端恒返回 errorCode=12 (aid 级风控, 与请求侧无关),
|
|
且 1ms 签到每天只能试一次 —— 不适合做回归。
|
|
而抓包 `har/原始抓包/登录抓包-点选.har` 里的 aid **190758559** (mliev.login.wang 短信登录)
|
|
可反复测: 本客户端 (纯算, 零 Node) 稳定拿到 errorCode=0 + 真 ticket。
|
|
|
|
用法:
|
|
.venv/bin/python scripts/check_real_tencent_aid.py # 默认 190758559
|
|
.venv/bin/python scripts/check_real_tencent_aid.py --aid 195672344 # 对照: 1ms 会得到 12
|
|
|
|
注意: 只调用腾讯天御的验证码接口 (prehandle/tdc.js/getcapbysig/verify),
|
|
**不会**触发任何短信/签到等业务副作用。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
if str(ROOT) not in sys.path:
|
|
sys.path.insert(0, str(ROOT))
|
|
|
|
from tcaptcha.client import KIND_TEXT_CLICK, TencentCaptchaClient # noqa: E402
|
|
|
|
# (aid, entry_url, referer, wb)
|
|
TARGETS = {
|
|
"190758559": ("https://mliev.login.wang/auth/#/oidc/authorize", "https://mliev.login.wang/", "1"),
|
|
"195672344": ("https://1ms.run/console/personal/benefits/check-in", "https://1ms.run/", "1"),
|
|
}
|
|
|
|
|
|
def main() -> int:
|
|
ap = argparse.ArgumentParser(description="真机 aid 冒烟: 纯算链路端到端")
|
|
ap.add_argument("--aid", default="190758559", choices=sorted(TARGETS))
|
|
ap.add_argument("--transport", default="httpx", choices=["httpx", "curl"])
|
|
ap.add_argument("--refreshes", type=int, default=25)
|
|
args = ap.parse_args()
|
|
|
|
entry_url, referer, wb = TARGETS[args.aid]
|
|
client = TencentCaptchaClient(aid=args.aid, entry_url=entry_url, referer=referer, wb=wb,
|
|
accept_kinds=(KIND_TEXT_CLICK,), telemetry_mode="python_keyed",
|
|
transport=args.transport)
|
|
try:
|
|
result = client.solve(max_retries=2, max_refreshes=args.refreshes)
|
|
finally:
|
|
client.close()
|
|
|
|
raw = result.get("raw_response") or {}
|
|
print("\n=== 结果 ===")
|
|
print("aid :", args.aid)
|
|
print("transport :", args.transport)
|
|
print("success :", result.get("success"))
|
|
print("errorCode :", raw.get("errorCode"))
|
|
print("ticket :", (raw.get("ticket") or "")[:32])
|
|
print("randstr :", raw.get("randstr"))
|
|
print("telemetry :", result.get("raw_response", {}).get("sess") and "python_keyed(纯算)")
|
|
return 0 if result.get("success") else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|