Recaptcha2 图像识别 API 集成指南

1 阅读5分钟

在现代 web 应用中,Recaptcha2 验证码是保护网站免受恶意攻击的重要工具。本文将介绍如何集成 Recaptcha2 图像识别 API,该 API 能够识别用户输入的内容和 Recaptcha2 验证图像,最终返回需要点击的小图像的坐标。

背景

Ace Data Cloud 提供了一系列强大的数据处理服务,其中包括 Recaptcha2 图像识别 API。该 API 使开发者能够自动化处理验证码,提升用户体验,尤其在需要频繁进行验证的场景中,如注册、登录等。要使用此服务,首先需要在 Recaptcha2 图像识别 API 页面申请相应的服务。

申请流程

在开始使用 API 之前,您需要申请相应的服务。进入上述链接后,点击“获取”按钮,如下图所示:

如果您尚未注册或登录,系统会自动引导您进行注册或登录。完成后,您将返回到当前页面,并会获得一个免费的配额,允许您免费使用该 API。

基本用法

首先,我们需要从网站上捕获 Recaptcha2 验证图像。示例网站的 URL 为:https://www.google.com/recaptcha/api2/demo,如下图所示:

为了显示验证图像,我们需要点击验证码框。图中黄色箭头指向的文本是后续提到的 question 值。接下来,我们需要传递一个名为 image 的字段,该字段对应具体的 Recaptcha2 验证图像,红箭头所指即为该图像。请将图像缩放至标准尺寸(100x100、300x300、450x450),以便服务能辨识图像类型。推荐使用 Photopea 进行图像的尺寸调整和压缩。压缩后的结果如下图所示:

除了图像,您还需要输入与验证图像相关的识别内容参数,即 question。以下是内容参数的参考表:

中文内容表

{
  "/m/0pg52": "出租车",
  "/m/01bjv": "巴士",
  "/m/02yvhj": "校车",
  "/m/04_sv": "摩托车",
  "/m/013xlm": "拖拉机",
  "/m/01jk_4": "烟囱",
  "/m/014xcs": "人行横道",
  "/m/015qff": "红绿灯",
  "/m/0199g": "自行车",
  "/m/015qbp": "停车计价表",
  "/m/0k4j": "汽车",
  "/m/015kr": "桥",
  "/m/019jd": "船",
  "/m/0cdl1": "棕榈树",
  "/m/09d_r": "山",
  "/m/01pns0": "消防栓",
  "/m/01lynh": "楼梯"
}

英文内容表

{
  "/m/0pg52": "taxis",
  "/m/01bjv": "bus",
  "/m/02yvhj": "school bus",
  "/m/04_sv": "motorcycles",
  "/m/013xlm": "tractors",
  "/m/01jk_4": "chimneys",
  "/m/014xcs": "crosswalks",
  "/m/015qff": "traffic lights",
  "/m/0199g": "bicycles",
  "/m/015qbp": "parking meters",
  "/m/0k4j": "cars",
  "/m/015kr": "bridges",
  "/m/019jd": "boats",
  "/m/0cdl1": "palm trees",
  "/m/09d_r": "mountains or hills",
  "/m/01pns0": "fire hydrant",
  "/m/01lynh": "stairs"
}

我们可以将参数 question 设置为对应消防栓的 /m/01pns0,具体内容如下图所示:

在请求头部,我们需要设置如下字段:

  • accept: 希望接收的响应结果格式,这里填为 application/json,表示 JSON 格式。
  • authorization: 调用 API 的密钥,可在申请后直接选择。

请求体中需要包含:

  • image: Base64 编码的验证图像。
  • question: 问题 ID,请参考前面的表格,ID 以 /m/ 开头。

选择后,您可以在右侧查看生成的对应代码,如下图所示:

点击“尝试”按钮进行测试,您将获得如下结果:

{
  "solution": {
    "size": 300,
    "label": "/m/01pns0",
    "confidences": [
      0,
      0.0007,
      1,
      0.0003,
      0.0046,
      1,
      0,
      1,
      0
    ],
    "objects": [
      2,
      5,
      7
    ],
    "type": "multi"
  }
}

返回结果包含多个字段,其含义如下:

  • solution: 处理 Recaptcha2 验证图像任务后的结果。
    • size: Recaptcha2 验证图像的尺寸。
    • label: 从 Recaptcha2 验证图像中识别出的内容。
    • confidences: 识别区域的置信度,区域从 0 开始。
    • objects: 识别后符合内容的区域,区域从 0 开始。
    • type: Recaptcha2 验证图像任务的类型,当存在多个区域时为 multi

通过以上步骤,我们就获取了处理 Recaptcha2 验证图像的结果。接下来,我们将验证图像分区,如下图所示:

区域从 0 开始,结果中的 objects 表示我们获得了 2、5 和 7。我们只需模拟点击这三个区域的验证码即可通过验证。

如果需要生成相应的集成代码,可以直接复制生成的代码。例如,以下是 CURL 代码:

curl -X POST 'https://api.acedata.cloud/captcha/recognition/recaptcha2' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "question": "/m/01pns0",
  "image": "iVBORw0KGgoAAAANSUhEUgAAASoAAAEsCAIAAAD7AWllAAAAAX..."
}'

Python 的集成代码如下:

import requests

url = "https://api.acedata.cloud/captcha/recognition/recaptcha2"

headers = {
    "accept": "application/json",
    "authorization": "Bearer {token}",
    "content-type": "application/json"
}

payload = {
    "question": "/m/01pns0",
    "image": "iVBORw0KGgoAAAANSUhEUgAAASoAAAEsCAIAAAD7AWllAAAAAX..."
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)

错误处理

在调用 API 时,如果发生错误,API 会返回相应的错误代码和消息。例如:

  • 400 token_mismatched: 错误请求,可能是缺少或无效的参数。
  • 400 api_not_implemented: 错误请求,可能是缺少或无效的参数。
  • 401 invalid_token: 未授权,授权令牌无效或缺失。
  • 429 too_many_requests: 请求过多,您已超过速率限制。
  • 500 api_error: 服务器内部错误,服务器出现问题。

错误响应示例

{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf