打码服务 / AWS WAF 图像识别
AWS WAF 图像识别
图像识别 ·
AwsClassificationAmazon AWS WAF 的图形验证码识别。
AWS WAF 会给出一个带扭曲文字的图片,这个类型直接返回文字结果。
请求
POST /v1/captcha/solve?timeout=180
Authorization: Bearer arp_xxx
Content-Type: application/json请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
type | string | 是 | 固定填 AwsClassification |
queries | string | 是 | 图片 Base64(单张字符串;多张用数组) |
question | string | 是 | 必填。题面文字,如 Type the characters you see。漏了会回 ERROR_INVALID_REQUEST: Empty question |
只传上表列出的参数即可,认证由网关自动处理。
请求示例
{
"type": "AwsClassification",
"queries": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAAyCAAAAAD+Co+5AAAA4klEQVR42u3YwRKDIAwEUD7dP6+dnhZKEhCQ1dnc6ET6zCAwSR/ySAIKKODTgQcEfQUZsRkwfSPGYlZtbPyRmZWKaATiOMcSAv1lQAbEX3vW7BZgDzaeq541DRjtBlTA9q2LAIiZ8Qc2FRjjvOVfrywREOdCLCUQx2Vl6YA4/lXUm9CetA23ZKMW8NXAvvPTR866lAko4NXLgoACuk/B7WYMOLIFZ1lHHtMqeB1YiOxz6zagXSP/YF0H/K9R/Bpr229mjbb1B5eIhoB3iPqAG0QBcL/IawEzdoHV5RdQQAEXxwn8FOsjAT8powAAAABJRU5ErkJggg==",
"question": "Type the characters you see"
}响应示例
{
"ok": true, "ready": true, "price": 8, "balance": 872,
"clicks": [{ "x": 33, "y": 10 }, { "x": 99, "y": 10 }],
"objects": [true, true, false]
}怎么取结果:取
clicks 驱动点击。box 是同一批坐标的扁平写法,objects 是**布尔命中标记**(不是下标),别按 reCAPTCHA 那张表去取。完整调用
curl -X POST 'https://api.xiaobaicap.com/v1/captcha/solve?timeout=180' \
-H "Authorization: Bearer arp_xxx" \
-H 'Content-Type: application/json' \
-d '{
"type": "AwsClassification",
"queries": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAAyCAAAAAD+Co+5AAAA4klEQVR42u3YwRKDIAwEUD7dP6+dnhZKEhCQ1dnc6ET6zCAwSR/ySAIKKODTgQcEfQUZsRkwfSPGYlZtbPyRmZWKaATiOMcSAv1lQAbEX3vW7BZgDzaeq541DRjtBlTA9q2LAIiZ8Qc2FRjjvOVfrywREOdCLCUQx2Vl6YA4/lXUm9CetA23ZKMW8NXAvvPTR866lAko4NXLgoACuk/B7WYMOLIFZ1lHHtMqeB1YiOxz6zagXSP/YF0H/K9R/Bpr229mjbb1B5eIhoB3iPqAG0QBcL/IawEzdoHV5RdQQAEXxwn8FOsjAT8powAAAABJRU5ErkJggg==",
"question": "Type the characters you see"
}'
import requests
r = requests.post(
"https://api.xiaobaicap.com/v1/captcha/solve",
headers={"Authorization": "Bearer arp_xxx"},
params={"timeout": 180},
json={
"type": "AwsClassification",
"queries": "iVBORw0KGgoAAAANSUhEUgAAAKAAAAAyCAAAAAD+Co+5AAAA4klEQVR42u3YwRKDIAwEUD7dP6+dnhZKEhCQ1dnc6ET6zCAwSR/ySAIKKODTgQcEfQUZsRkwfSPGYlZtbPyRmZWKaATiOMcSAv1lQAbEX3vW7BZgDzaeq541DRjtBlTA9q2LAIiZ8Qc2FRjjvOVfrywREOdCLCUQx2Vl6YA4/lXUm9CetA23ZKMW8NXAvvPTR866lAko4NXLgoACuk/B7WYMOLIFZ1lHHtMqeB1YiOxz6zagXSP/YF0H/K9R/Bpr229mjbb1B5eIhoB3iPqAG0QBcL/IawEzdoHV5RdQQAEXxwn8FOsjAT8powAAAABJRU5ErkJggg==",
"question": "Type the characters you see"
},
timeout=200,
)
d = r.json()
if not d.get("ok"):
raise SystemExit(d)
print(d.get("token") or d.get("text") or d.get("objects"))注意事项
question是必填的 —— 这一点和 reCAPTCHA 图像识别不一样,漏了直接报 Empty question。- 返回里还有
confidences(每格置信度),要自己设阈值时可以用。
错误
失败时返回 502,积分全额退回,可以安全重试:
{"error":"识别失败,已全额退回 10 积分:...","code":"mint_failed"}
| code | 含义 | 处理 |
|---|---|---|
insufficient_credits | 积分不足(402,未扣费) | 充值后重试 |
bad_request | 参数不合法或类型不支持(400) | 对照上方参数表改 |
mint_failed | 识别失败(502,已退回) | 退避 2~3 秒重试 |
rate_limited | 触发限流(429) | 按 Retry-After 退避 |