#!/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())