Explainers

在自有 QA 中使用 CaptchaAI 管理 user-agent

安全范围: 本指南仅适用于你自有或经授权的 QA、staging 与预发布环境,覆盖针对你自己 CAPTCHA 集成的诊断、测试与可观测性模式 — 不涉及第三方站点或未授权流程。

同一条用例昨天跑通、今天却卡在验证码环节 —— 代码没动,变的往往是 user-agent。把 UA 当成用例的一部分固定下来:浏览器、HTTP 客户端和提交给 CaptchaAI 的请求用同一个 UA,用例才可复现。

为什么 user-agent 会影响测试结果

现象 常见原因
结果时好时坏 每次运行随机取 UA,样本不可比
会话中途重新验证 一次会话内 UA 变了
后端校验 token 失败 浏览器与 API 用了不同 UA

UA 不是要调优的参数,而是要锁定的变量。

维护一份受控的 UA 清单

清单越短越好,覆盖你承诺支持的浏览器组合即可。版本号、平台标识和随 UA 发出的请求头都要来自真实浏览器;拼凑的 UA 会让结果失去参考价值。

把 UA 与用例编号绑定

每条用例固定一个 UA,映射关系随用例进版本库。拿到失败的 case 就能还原当时的浏览器画像,不用靠猜。

国内团队的 staging 常同时挂两套验证码:面向海外的 reCAPTCHA 或 Turnstile,面向国内的 GeeTest(极验)滑块。reCAPTCHA 依赖 Google 托管脚本,国内网络下加载本就不稳定;UA 再随机变化,就分不清失败来自网络还是集成。两条链路各绑一组固定 UA,原因才能区分。(CaptchaAI 支持 GeeTest v3 与 Turnstile,GeeTest v4 为即将支持。)

在 CaptchaAI 请求中保持同一个 UA

提交识别任务时,把浏览器实际使用的 UA 一并传过去:浏览器用什么,API 请求就带什么。在 CI 里 API Key 从 vault 注入,UA 从用例配置读取;每次运行记录耗时、状态码与所用 UA。

示例 QA 调用

下面是在自有 staging 上通过 CaptchaAI 测试 CAPTCHA widget 的最小流程。

import os
import requests

API_KEY = os.environ['CAPTCHAAI_KEY']
QA_PAGE_URL = os.environ['QA_PAGE_URL']  # 例如 https://staging.example.com/qa-login
QA_SITE_KEY = os.environ['QA_SITE_KEY']


def submit_qa_recaptcha() -> str:
    payload = {
        'clientKey': API_KEY,
        'task': {
            'type': 'NoCaptchaTaskProxyless',
            'websiteURL': QA_PAGE_URL,
            'websiteKey': QA_SITE_KEY,
        },
    }
    response = requests.post(
        'https://api.captchaai.com/createTask',
        json=payload,
        timeout=30,
    )
    response.raise_for_status()
    return response.json()['taskId']


def fetch_qa_result(task_id: str) -> dict:
    payload = {'clientKey': API_KEY, 'taskId': task_id}
    response = requests.post(
        'https://api.captchaai.com/getTaskResult',
        json=payload,
        timeout=30,
    )
    response.raise_for_status()
    return response.json()

故障排除

问题 处理方式
找不到 widget 检查选择器与等待时机
返回 ERROR_NO_SLOT_AVAILABLE 在内部 pipeline 中按指数退避重试
后端拒绝 token 核对 action / sitekey / secret,确认两端 UA 一致
结果不稳定 先确认 UA 已固定,再排查其他变量

常见问题

UA 清单多久更新一次?

跟着浏览器大版本走,每 1—2 个月一次。标准不是新旧,而是版本是否还对应你支持的范围。

一次会话里可以换 UA 吗?

不建议。会话内保持同一个 UA 是可复现的前提。要覆盖多种画像,就跑多条用例,每条固定一个 UA。

UA 需要和其他请求头一起对齐吗?

需要。请求头与 UA 属于同一套画像,只改 UA 会得到不存在的组合。

这套流程会接触生产流量吗?

不会。示例都假设你自有的 QA 域名。数据采集场景另需遵守网络安全法、数据安全法与 PIPL。

安全相关指南

CaptchaAI 在自有环境中验证 CAPTCHA 集成。

该文章已禁用评论。