打码服务 / hCaptcha

hCaptcha

协议接口  ·  HCaptchaTaskProxyless

hCaptcha 的协议解法,返回 gRecaptchaResponse 形式的令牌。

hCaptcha 的令牌字段名沿用了 gRecaptchaResponse。如果目标站是 Discord 一类,通常还需要带上 rqdata。

I am human hCaptcha hCaptcha
外观和 reCAPTCHA v2 很像,但站点 key 是 UUID 形式,令牌字段是 h-captcha-response。

请求

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

请求参数

参数类型必填说明
typestring是固定填 HCaptchaTaskProxyless
websiteURLstring是验证码所在页面的完整地址
websiteKeystring是站点 key(UUID 形式)
userAgentstring否与真实请求一致的 User-Agent。若传了,提交时也要用同一个
isInvisibleboolean否隐形版本传 true
rqdatastring否部分站点(如 Discord)需要

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

请求示例

{
  "type": "HCaptchaTaskProxyless",
  "websiteURL": "https://example.com/signup",
  "websiteKey": "10000000-ffff-ffff-ffff-000000000001",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
}

响应示例

{
  "ok": true, "ready": true, "price": 10, "balance": 950,
  "solution": { "gRecaptchaResponse": "P1_eyJ0eXAiOiJKV1Qi..." },
  "token": "P1_eyJ0eXAiOiJKV1Qi..."
}
怎么取结果:取 token,字段名是 h-captcha-response。

完整调用

curl -X POST 'https://api.xiaobaicap.com/v1/captcha/solve?timeout=180' \
  -H "Authorization: Bearer arp_xxx" \
  -H 'Content-Type: application/json' \
  -d '{
         "type": "HCaptchaTaskProxyless",
         "websiteURL": "https://example.com/signup",
         "websiteKey": "10000000-ffff-ffff-ffff-000000000001",
         "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
       }'
import requests

r = requests.post(
    "https://api.xiaobaicap.com/v1/captcha/solve",
    headers={"Authorization": "Bearer arp_xxx"},
    params={"timeout": 180},
    json={
  "type": "HCaptchaTaskProxyless",
  "websiteURL": "https://example.com/signup",
  "websiteKey": "10000000-ffff-ffff-ffff-000000000001",
  "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36"
},
    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 退避