reCAPTCHA v2(勾选框 / 隐藏式)
reCAPTCHA v2(勾选框 / 隐藏式) 是 Google 的勾选框 / 隐藏式。经典的「我不是机器人」勾选框;勾完可能弹出九宫格图片题(选红绿灯、人行道那种)。隐藏式(invisible)则什么都不显示,只在右下角留一个 reCAPTCHA 徽章,提交时在后台跑。
接口规格
| 项目 | 值 |
|---|---|
| type | recaptcha_v2 |
| 必填参数 | website_urlwebsite_key |
| 可选参数 | invisibledata_spage_actionapi_domain |
| 返回 | 一个 token 字符串(solution.gRecaptchaResponse) |
| 怎么用这个解 | 填回目标站表单的 `g-recaptcha-response` 字段 |
| 价格 | $1.11 / 1K 次 —— 按成功计费,没解出来退款 |
| 厂商文档 | Google 官方文档 |
参数去页面哪里取
下面全部是可以直接照做的定位方法 —— DOM 属性名、JS 全局变量名、script 上的 query 参数。
必填 website_url + website_key,可选 invisible。
website_key(sitekey)
容器是一个带 g-recaptcha 类的 div,key 在 data-sitekey:
<div class="g-recaptcha" data-sitekey="your_site_key"></div>一行取:document.querySelector('.g-recaptcha').dataset.sitekey
显式渲染时在 grecaptcha.render(container, {sitekey: …, theme: …}) 的参数里;
兜底正则 document.documentElement.outerHTML.match(/6L[\w-]{38}/)(sitekey 实践中以 6L 开头、40 位)。
⚠ 先确认它真是 v2,别按 v3 提交
三者用的脚本长得很像:
· api.js(无 render 参数,或 render=explicit)+ 页面上有 .g-recaptcha → v2
· api.js?render=<40 位 key> → v3(打分式,走 recaptcha_v3)
· enterprise.js → Enterprise(走 recaptcha_v2_enterprise / recaptcha_v3_enterprise)
控制台判定:typeof grecaptcha.enterprise 返回 "object" 就是 Enterprise。
⚠ 勾选框版还是隐藏式版 —— 这决定要不要传 `invisible`
· 容器上有 data-size="invisible" → 隐藏式
· g-recaptcha 类直接挂在提交按钮上(<button class="g-recaptcha" data-sitekey=… data-callback=…>)→ 隐藏式的自动绑定写法
· 有 data-badge(bottomright / bottomleft / inline)→ 隐藏式独有的配置项,勾选框版没有
· 以上都没有、页面上就是个方框 → 勾选框版
回填
表单字段名是 `g-recaptcha-response`(提交时作为 POST 参数带出去)。
⚠ Google 官方文档只写了字段名、没有写它是什么元素;实践中是一个隐藏 textarea,
用 grecaptcha.getResponse() 取更稳,别去猜 DOM 结构。
调用示例
一个端点解全部验证码类型 —— 换一种验证码只改 type 这一个字段。
curl -X POST https://api.everyinfra.com/api/v1/captcha \ -H "Authorization: Bearer omg_你的KEY" \ -H "Content-Type: application/json" \ -d '{"type":"recaptcha_v2","website_url":"<website_url>","website_key":"<website_key>"}'
{ "solution": { "gRecaptchaResponse": "…" }, "billing": { "charged": true, "credits": 80 }}
怎么确认目标站用的就是它
组件采集浏览器环境与行为信号换一个 token,站点后端拿 token 去 siteverify 校验。风险高时升级成图片题,让用户直接提供人类判断。
容易搞混的
三个方向都容易错:① reCAPTCHA v3 —— 同一个 api.js,区别只在 ?render=<sitekey>,v3 是打分无交互;② Enterprise —— 脚本换成 enterprise.js、命名空间是 grecaptcha.enterprise;③ hCaptcha —— 外观几乎一样,但脚本域是 hcaptcha.com、字段是 h-captcha-response。
常见部署场景
- 全世界最常见的表单防护,登录/注册/评论/找回密码
- 老站点与各类 CMS 插件(WordPress、Discuz 等)的默认选项
- 对 Google 生态没有顾虑、且不需要 Enterprise 那套风控的站点
已知的坑
别拿 v3 的页面按 v2 提交:判据是 script 上有没有 render=<key>。搞错的话 token 生成得出来、却在目标站校验不过。
隐藏式与勾选框式用同一个脚本 URL,光看脚本区分不出来,必须看 DOM(data-size / data-badge / 类挂在按钮上)。
Google 已把这一页标为弃用、指向 Cloud Fraud Defense。老站点仍在大量使用,但新站点越来越多直接上 Enterprise —— 遇到解不了先确认是不是 Enterprise。
显式渲染时官方要求 onload 回调必须在 reCAPTCHA 脚本加载之前定义,否则有竞态。这解释了为什么有些页面上 grecaptcha 存在但组件没渲染出来。
隐藏式 v2 和 v3 在页面上长得一样。分不清就两个都试一次,错的那次会以 422 明确报错,不会扣费
常见问题
reCAPTCHA v2(勾选框 / 隐藏式) 要传哪些参数?
必填 website_url、website_key;可选 invisible、data_s、page_action、api_domain。请求里 type 传 recaptcha_v2。
解出来的东西怎么用?
返回一个 token 字符串,取 solution.gRecaptchaResponse。填回目标站表单的 g-recaptcha-response 字段
recaptcha_v2_enterprise 要去页面的哪里找?
重点找 recaptcha_v2_enterprise、recaptcha_v3_enterprise、recaptcha_v3。本页「参数去页面哪里取」一节写了全部位置与取法,含可直接粘进控制台的一行命令。
怎么确认目标站用的就是 reCAPTCHA v2(勾选框 / 隐藏式)?
三个方向都容易错:① reCAPTCHA v3 —— 同一个 api.js,区别只在 ?render=<sitekey>,v3 是打分无交互;② Enterprise —— 脚本换成 enterprise.js、命名空间是 grecaptcha.enterprise;③ hCaptcha —— 外观几乎一样,但脚本域是 hcaptcha.com、字段是 h-captcha-response。
有什么容易踩的坑?
别拿 v3 的页面按 v2 提交:判据是 script 上有没有 render=<key>。搞错的话 token 生成得出来、却在目标站校验不过。
多少钱一次,失败扣不扣?
$1.11 / 1K 次。按成功计费 —— 没解出来一律退款,所以失败不花钱。账单按次记,标价按每千次是为了让量级读得出来。