打码服务 / hCaptcha 图像识别

hCaptcha 图像识别

图像识别  ·  HCaptchaClassification

把 hCaptcha 的图块交给平台判断。

传一组 queries(要判断的图块),可选带 anchors(参考图)和问题文本。

Select all squares with traffic lights 要选几张 你只负责判断「哪几格符合」
九宫格挑战。你负责驱动点击流程,平台只回答「哪几格符合题目」。

请求

POST /v1/captcha/solve?timeout=180
Authorization: Bearer arp_xxx
Content-Type: application/json

请求参数

参数类型必填说明
typestring是固定填 HCaptchaClassification
queriesarray是要判断的图块 Base64 数组。单张也可以直接传字符串(两种都支持)
questionstring是必填。问题文本,如 Please click each image containing a cat
anchorsarray否参考图(有些题目会给一张范例图)

只传上表列出的参数即可,认证由网关自动处理。

请求示例

{
  "type": "HCaptchaClassification",
  "queries": ["iVBORw0KGgoAAAANSUhEUgAAAKAAAAAyCAAAAAD+Co+5AAAA4klEQVR42u3YwRKDIAwEUD7dP6+dnhZKEhCQ1dnc6ET6zCAwSR/ySAIKKODTgQcEfQUZsRkwfSPGYlZtbPyRmZWKaATiOMcSAv1lQAbEX3vW7BZgDzaeq541DRjtBlTA9q2LAIiZ8Qc2FRjjvOVfrywREOdCLCUQx2Vl6YA4/lXUm9CetA23ZKMW8NXAvvPTR866lAko4NXLgoACuk/B7WYMOLIFZ1lHHtMqeB1YiOxz6zagXSP/YF0H/K9R/Bpr229mjbb1B5eIhoB3iPqAG0QBcL/IawEzdoHV5RdQQAEXxwn8FOsjAT8powAAAABJRU5ErkJggg==", "iVBORw0KGgoAAAANSUhEUgAAAKAAAAAyCAAAAAD+Co+5AAAA4klEQVR42u3YwRKDIAwEUD7dP6+dnhZKEhCQ1dnc6ET6zCAwSR/ySAIKKODTgQcEfQUZsRkwfSPGYlZtbPyRmZWKaATiOMcSAv1lQAbEX3vW7BZgDzaeq541DRjtBlTA9q2LAIiZ8Qc2FRjjvOVfrywREOdCLCUQx2Vl6YA4/lXUm9CetA23ZKMW8NXAvvPTR866lAko4NXLgoACuk/B7WYMOLIFZ1lHHtMqeB1YiOxz6zagXSP/YF0H/K9R/Bpr229mjbb1B5eIhoB3iPqAG0QBcL/IawEzdoHV5RdQQAEXxwn8FOsjAT8powAAAABJRU5ErkJggg=="],
  "question": "Please click each image containing a cat"
}

响应示例

{
  "ok": true, "ready": true, "price": 10, "balance": 900,
  "solution": {
    "type": "click", "question": "Please click each image containing a cat",
    "box": ["26","37","99","37","166","37"],
    "clicks": [{ "x": 26, "y": 37 }, { "x": 99, "y": 37 }, { "x": 166, "y": 37 }]
  },
  "clicks": [{ "x": 26, "y": 37 }, { "x": 99, "y": 37 }, { "x": 166, "y": 37 }]
}
怎么取结果:取 clicks 驱动点击。**这个类型不返回 objects** —— 它返回的是 box / clicks / confidences,照 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": "HCaptchaClassification",
         "queries": ["iVBORw0KGgoAAAANSUhEUgAAAKAAAAAyCAAAAAD+Co+5AAAA4klEQVR42u3YwRKDIAwEUD7dP6+dnhZKEhCQ1dnc6ET6zCAwSR/ySAIKKODTgQcEfQUZsRkwfSPGYlZtbPyRmZWKaATiOMcSAv1lQAbEX3vW7BZgDzaeq541DRjtBlTA9q2LAIiZ8Qc2FRjjvOVfrywREOdCLCUQx2Vl6YA4/lXUm9CetA23ZKMW8NXAvvPTR866lAko4NXLgoACuk/B7WYMOLIFZ1lHHtMqeB1YiOxz6zagXSP/YF0H/K9R/Bpr229mjbb1B5eIhoB3iPqAG0QBcL/IawEzdoHV5RdQQAEXxwn8FOsjAT8powAAAABJRU5ErkJggg==", "iVBORw0KGgoAAAANSUhEUgAAAKAAAAAyCAAAAAD+Co+5AAAA4klEQVR42u3YwRKDIAwEUD7dP6+dnhZKEhCQ1dnc6ET6zCAwSR/ySAIKKODTgQcEfQUZsRkwfSPGYlZtbPyRmZWKaATiOMcSAv1lQAbEX3vW7BZgDzaeq541DRjtBlTA9q2LAIiZ8Qc2FRjjvOVfrywREOdCLCUQx2Vl6YA4/lXUm9CetA23ZKMW8NXAvvPTR866lAko4NXLgoACuk/B7WYMOLIFZ1lHHtMqeB1YiOxz6zagXSP/YF0H/K9R/Bpr229mjbb1B5eIhoB3iPqAG0QBcL/IawEzdoHV5RdQQAEXxwn8FOsjAT8powAAAABJRU5ErkJggg=="],
         "question": "Please click each image containing a cat"
       }'
import requests

r = requests.post(
    "https://api.xiaobaicap.com/v1/captcha/solve",
    headers={"Authorization": "Bearer arp_xxx"},
    params={"timeout": 180},
    json={
  "type": "HCaptchaClassification",
  "queries": ["iVBORw0KGgoAAAANSUhEUgAAAKAAAAAyCAAAAAD+Co+5AAAA4klEQVR42u3YwRKDIAwEUD7dP6+dnhZKEhCQ1dnc6ET6zCAwSR/ySAIKKODTgQcEfQUZsRkwfSPGYlZtbPyRmZWKaATiOMcSAv1lQAbEX3vW7BZgDzaeq541DRjtBlTA9q2LAIiZ8Qc2FRjjvOVfrywREOdCLCUQx2Vl6YA4/lXUm9CetA23ZKMW8NXAvvPTR866lAko4NXLgoACuk/B7WYMOLIFZ1lHHtMqeB1YiOxz6zagXSP/YF0H/K9R/Bpr229mjbb1B5eIhoB3iPqAG0QBcL/IawEzdoHV5RdQQAEXxwn8FOsjAT8powAAAABJRU5ErkJggg==", "iVBORw0KGgoAAAANSUhEUgAAAKAAAAAyCAAAAAD+Co+5AAAA4klEQVR42u3YwRKDIAwEUD7dP6+dnhZKEhCQ1dnc6ET6zCAwSR/ySAIKKODTgQcEfQUZsRkwfSPGYlZtbPyRmZWKaATiOMcSAv1lQAbEX3vW7BZgDzaeq541DRjtBlTA9q2LAIiZ8Qc2FRjjvOVfrywREOdCLCUQx2Vl6YA4/lXUm9CetA23ZKMW8NXAvvPTR866lAko4NXLgoACuk/B7WYMOLIFZ1lHHtMqeB1YiOxz6zagXSP/YF0H/K9R/Bpr229mjbb1B5eIhoB3iPqAG0QBcL/IawEzdoHV5RdQQAEXxwn8FOsjAT8powAAAABJRU5ErkJggg=="],
  "question": "Please click each image containing a cat"
},
    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"))

错误

失败时返回 502,积分全额退回,可以安全重试:

{"error":"识别失败,已全额退回 10 积分:...","code":"mint_failed"}
code含义处理
insufficient_credits积分不足(402,未扣费)充值后重试
bad_request参数不合法或类型不支持(400)对照上方参数表改
mint_failed识别失败(502,已退回)退避 2~3 秒重试
rate_limited触发限流(429)按 Retry-After 退避