> ## Documentation Index
> Fetch the complete documentation index at: https://docs.acedata.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# hCaptcha Protocolo de Reconocimiento API Integración

> hCaptcha verification code recognition service API guide - Ace Data Cloud

Este documento presentará una descripción de la integración de la API de reconocimiento del protocolo hCaptcha, que permite a los usuarios completar la verificación sin necesidad de identificar y seleccionar imágenes de captcha hCaptcha, simplemente enviando la clave del sitio web para lograr la decodificación automática en segundo plano.

## Proceso de Solicitud

Para utilizar la API de reconocimiento del protocolo hCaptcha, primero dirígete a [la consola de Ace Data Cloud](https://platform.acedata.cloud/console/applications) para obtener tu token de API, que debes guardar para uso futuro.

![](https://cdn.acedata.cloud/5hmkdg.jpg)

Si aún no has iniciado sesión o registrado, serás redirigido automáticamente a la página de inicio de sesión que te invitará a registrarte e iniciar sesión, y una vez completado, regresarás automáticamente a la página actual.

**Un token de API es suficiente para acceder a todos los servicios de la plataforma, sin necesidad de solicitar uno por cada servicio.** La primera solicitud te otorgará un crédito gratuito para que puedas probarlo; si el crédito es insuficiente, puedes recargar el saldo general en [la consola](https://platform.acedata.cloud/console/coin).

> 📘 Documentación completa: [API de Reconocimiento del Protocolo hCaptcha →](https://platform.acedata.cloud/documents/captcha-token-hcaptcha)

## Uso Básico

Primero, debes entender la forma básica de uso, que consiste en ingresar la URL del sitio web que necesita procesar el captcha hCaptcha, y así obtener el resultado procesado. Primero, necesitas pasar un campo `website_url`, nuestro sitio de ejemplo es: `https://accounts.hcaptcha.com/demo`, necesitamos obtener el `website_key` en la página `website_url`, primero abre esta página, presiona F12 para acceder a la consola, y finalmente realiza una búsqueda global en la página de Elementos por `hcaptcha-demo`, así obtendremos el siguiente resultado:

<p>
  <img src="https://cdn.acedata.cloud/bmx7ik.png" width="500" className="m-auto" />
</p>

La cadena de caracteres correspondiente a `data-sitekey` es el valor de `website_key`, a continuación se presentan los resultados de los parámetros específicos:

<p>
  <img src="https://cdn.acedata.cloud/st6q7a.png" width="500" className="m-auto" />
</p>

Aquí podemos ver que hemos configurado los encabezados de la solicitud, que incluyen:

* `accept`: el formato de respuesta que deseas recibir, aquí se establece como `application/json`, es decir, en formato JSON.
* `authorization`: la clave para llamar a la API, que puedes seleccionar directamente después de solicitarla.

Además, se configuró el cuerpo de la solicitud, que incluye:

* `website_url`: la URL del sitio web que necesita procesar el captcha.
* `website_key`: el identificador de la clave del sitio en hCaptcha.
* `proxy`: opcional, trae tu propio proxy (Bring Your Own Proxy). Una vez configurado, el upstream utilizará la IP del proxy que proporcionaste para resolver el captcha, lo que ayuda a controlar la calidad de la IP de salida (por ejemplo, para evitar que una IP de proxy pública sea bloqueada por el sitio objetivo y devuelva `410 Gone`). El formato es `scheme://[user:pass@]host:port`, donde `scheme` admite `http`/`https`/`socks4`/`socks5`, por ejemplo, `http://user:pass@1.2.3.4:8080`. Si no se completa, se utilizará el proxy predeterminado de la plataforma.

Después de seleccionar, puedes notar que también se generó el código correspondiente a la derecha, como se muestra en la imagen:

<p>
  <img src="https://cdn.acedata.cloud/5gse4m.png" width="500" className="m-auto" />
</p>

Haz clic en el botón "Try" para realizar la prueba, como se muestra en la imagen anterior, aquí obtuvimos el siguiente resultado:

```json theme={null}
{
  "token": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.hadwYXNza2V5xQda4nQzFgUbYJqILiiwbvyhjocSilg8RjFHvIHmCzmqUNZa9hesIWEVRx5KIbMVeAQzSTWCwXmiQrPZuIEmZz-ZPL6DPNmB3ZXtJNsVYRLdRyvWPTB7EYskJG85yDVor2TcgQFNqAahhKT3WXjtk3S54ZBhv7QvaImUmos8MWgUOvUZHsvUtojN-izWIrBkD1if_71quOHvcvEVTLcSLx9dOgzpNAJ8_6BmJEsGlPbMGnSKrS1QfpPyzvgrnpjjIY_6TMYwJrR0EwJgCdp_lfc4mkxl0NJsZt8D_q7jcv3v6jt1CZ2qbqF5_-i4y0MYnQMCm1T62xBPdiEyst_FtGuWxJllkrrmWN0edyWcWeasLcCS6qpRry0H7RU7DYQnML6dmQoZg15NT0tFrAYeLK7EwvJxzcFbvUQ-Tc5QVk7tzvKpDtUVfQeZmRRgxWbCFf6bAT1z0uUwdma1O1lcTkSZCC5cVTaprkkKE04Ov4aCIKg2N7WGj4r0AOykisAISX5oidF3gejDTJy9vU1hgaCYFOimnwRKyqRsJdznptzhzDOQuICuAHYT3is1sY26ltJGOZTdDKkt2i2owCoAylgLbBP8VjTOGrsM12IH3Xsy076O40RCG6zThWN5TFKSpl7PNA6l2KoW-P3_K9WORjx2DSvKTAwqcouSU-0Rc_8Hlq9cIuS1iDhiNfJnJ_zNy_2gXSR2j7NP7m_lsfwELKypKm6pPzIhOuz5RwPotfPQfXOMdF3Xy98iQiihZmuHENvLAhjV_W7NL9TK3THPwDTFriS8ghIncl02v-fVARXDiuFTvjjlegL7xbHgIrOhLpunsxLiwdImUWatEI9jqaf84X4BtoS0TGYo4pHkpIG10dhoz3vooeSToAws6tz7ZWSHm6naksZ41X_WIxd7N8P9yzxrbLgVv-nHia5qHQLDmiZf3alITKhtisennw8NpespaQIVZzw_B16bdUNKqHCCTLdFbr16-3KpRoHzOOU2kBhV-gDN0NiA3ecqIMnyMdnpKlUpnjJ5sMA3e0pKEX_Vbu8DE8zfkcwLIwCIb2BLrKEHnCvv4JX8TfBktzMc5oTtZyEu-E_6ew0mSm_nhVsGtmLXSsB81FP9VGGRd50buIXRNW4GFp3XdTmYyuN32kc-AHJ5kKDj2HGraHxKco0McT7nV2bgx97k-C7hgxL2x5t3lC97edphh2kt2-gXuTxxfB7K-ZG6w5d1MnRte4ZG7TxvPFFi5693IFRFbvcr-U3WyGZJmGGdfV55PnoIU9Qn-WDtBU4EXyvd_KTt-asHtI6VQiVSNzacemTfsu9WBF33f2gafDY4qqhyXDPNsu6BZCGMSBhxDPURY74OBr4mYOdhjELY07nSkr9RQtQwiiSa8B8XFlezCPafjgdbmmNzG3PXa3n23sSwVnJHpHhq79eTP_KeeCiqlCvNsHLEfiH5HCNRGp7v5b342wBk__BWFimJMvohz0rucTVYgVFBdTOomUTuqCPeUgDP3X6BnNqyVDRA-HrdRl-RkU6mnw-3-IwyMZQ-fEnFMzbGp3zaoY7Do2jKvKKILoq6Q8zlDYkrLwuXjDP-nernI2hxP9wVOUVmtq5Rs19RLUI4MNWZAqwG-wGnaoB756d8nfmh5XhFzvArE5bpL50FY1yJqv7nbPW7JNnkfZG80yVRrIZO_F9NEb3n4eiIzg9Gu9fv8ncyChiCCp-swK5B7_w-XsAlco98bO-YK-fFMJOhyt0PU8Zc-hYoCa6cLVTvhdPzIUA0CQOemg4Pz6PX6SVwLYSlOXYkzbrgBlyH5YBS3oaRCeavVLrJsKt0_KwHwgBa1mdP5mlYUpBDbKR4PKwknU7y111JH0B4fO39dOVA-zecvDG0bnuy98Jym4KUchZr1tXabMcM20mg1UvcxMfnKOx0ojBcVwYA7kPQK3EzMnwX9NbAzYP6IlMgjFK9ZM7HCXxN6J1_6kw10RT4O58-Pbh3cMSrZDfM-GuG7p7XrVpJrX8TD195DCJqx-DmVv3Bs3CiuCPTvGrSZ58KE4hQagidGreUD2WXxLBFfTv1RgM3eXMtROs7hddyBajIu401lxucNbpRB7lYV7pJwxG7LQoSZ2G2LzG8eFPVPIkDNVOa8nGzh-sWaF7kc7bVv-P4FXbLX0WCjvQRES2MCbXPyJ-OpZZXZcJy7SOsGY3jZbTkGoez19cRQLiFO35gA5l9FBptDKW-_yGemt5XeKsR_FwGPN9C-0k1E-28oB4iKo-h1zb2kJpilhnmG36Z59F5T6W77M7OD_N6VHRWuPClLElO09OrPLHbJmxq9JvMWjTg5JjEaqyTLyLXWgw0N3kZMCqJJeqNj5w5I7dpuJ6ScfXKVaT96v2UESebdbMFT7vkZAkFF8LIowkN56pNwXLHkB2KyIWR2WQL-335BEpQ0AVB6RX4kdociIhtvAdsIE6pvFIwkzyO0OvIHxzOwPxZKdmDmBVMu7YxJStrhY-XWCu4kO5gDIJ0iedPWKNleHDOZuZqGKhzaGFyZF9pZM4xrUyBomtyqDE1ZmUwNDhkonBkAA.dVWyVc6N3lx2ZJQ7NJ9aEsWA-KAIuQ4PMSKVGQuWyCA",
  "elapsed": 31.6
}
```

Los resultados devueltos tienen múltiples campos, que se describen a continuación:

* `token`, el resultado de la verificación después de procesar la tarea del captcha hCaptcha.
* `started_at`, `finished_at`: el tiempo de inicio y finalización de esta solicitud, en marca de tiempo Unix (segundos, flotante).
* `elapsed`: el tiempo total de procesamiento de esta tarea (segundos).
  可以看到我们得到了处理 hCaptcha验证码 的验证结果，然后我们可以用于POST或模拟提交给目标网站，一次性使用，有效期120s，建议在60s内使用，接下来将提供一段CURL版本将处理后token提交到目标网站来通过Recaptcha2验证码。

首先我们需要获取网站是如何发送POST请求，这样我们才能将生成的token传入进去，我们需要先打开F12控制台，然后人工先通过一下，最后我们可以看到网站发送了一个POST请求，我们只需要查看这次的POST请求构造，具体的过程如下：

* 先人工通过验证，具体的如下图：

<p>
  <img src="https://cdn.acedata.cloud/bfg9w1.png" width="500" className="m-auto" />
</p>

* 再点击submit，观看控制台的network变化，具体的如下图：

<p>
  <img src="https://cdn.acedata.cloud/eszhv3.png" width="500" className="m-auto" />
</p>

* 分析此次提交的POST请求构造，最后可以右键该请求复制CURL的代码，具体的如下图：

<p>
  <img src="https://cdn.acedata.cloud/bif3mj.png" width="500" className="m-auto" />
</p>

由上图分析可知，此次POST请求的URL为：`https://accounts.hcaptcha.com/demo`，我们仅需要提交参数 `g-recaptcha-response`、`h-captcha-response` 和 `email`，然后我们只需要将处理后的token传入下面的data中即可，调用token验证所对应CURL代码如下：

```shell theme={null}
curl 'https://accounts.hcaptcha.com/demo' \
  --data-raw 'email=&g-recaptcha-response={token}&h-captcha-response={token}'
```

调用token验证所对应的Python代码如下：

```python theme={null}
import requests

token = '{token}'

data = {
    'email': '',
    'g-recaptcha-response': token,
    'h-captcha-response': token
}

response = requests.post('https://accounts.hcaptcha.com/demo',
                        data=data)

if response.status_code == 200:
    print(response.text)

```

然后我们观察控制台变得了这样的结果：

<p>
  <img src="https://cdn.acedata.cloud/87f51z.png" width="500" className="m-auto" />
</p>

最后我们就通过了hCaptcha验证码的验证。

另外如果想生成对应的对接代码，可以直接复制生成，例如 CURL 的代码如下：

```shell theme={null}
curl -X POST 'https://api.acedata.cloud/captcha/token/hcaptcha' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "website_key": "a5f74b19-9e45-40e0-b45d-47ff91b7a6c2",
  "website_url": "https://accounts.hcaptcha.com/demo"
}'
```

Python 的对接代码如下：

```python theme={null}
import requests

url = "https://api.acedata.cloud/captcha/token/hcaptcha"

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

payload = {
    "website_key": "a5f74b19-9e45-40e0-b45d-47ff91b7a6c2",
    "website_url": "https://accounts.hcaptcha.com/demo"
}

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

## Modo asíncrono (async)

Por defecto, la API es sincrónica y bloqueante: una solicitud esperará hasta que el token se procese antes de devolverlo. Si estás haciendo rotación de múltiples solucionadores (multi-solver rotation) y deseas "recibir el task\_id inmediatamente después de enviar la tarea, para luego programar otros solucionadores y volver más tarde a obtener el resultado", puedes pasar `async: true` en el cuerpo de la solicitud.

Al pasar `async: true`, la interfaz devolverá inmediatamente un `task_id`, sin bloquear la espera:

```json theme={null}
{
  "task_id": "61138bb6-19aa-11ec-a9c8-0242ac110002",
  "trace_id": "2efa9340-b21b-4e26-9e14-4aac95f343ab"
}
```

Luego, usa ese `task_id` para hacer polling en `POST /captcha/tasks` (se recomienda cada 3 a 5 segundos) para obtener el resultado:

```shell theme={null}
curl -X POST 'https://api.acedata.cloud/captcha/tasks' \
-H 'accept: application/json' \
-H 'authorization: Bearer {token}' \
-H 'content-type: application/json' \
-d '{
  "task_id": "61138bb6-19aa-11ec-a9c8-0242ac110002"
}'
```

Durante el procesamiento, se devolverá `status: processing`:

```json theme={null}
{ "success": true, "task_id": "61138bb6-19aa-11ec-a9c8-0242ac110002", "status": "processing" }
```

Al completar el procesamiento, se devolverá `status: ready` y el token:

```json theme={null}
{
  "success": true,
  "task_id": "61138bb6-19aa-11ec-a9c8-0242ac110002",
  "status": "ready",
  "token": "P1_eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1Ni......"
}
```

Descripción de facturación: en modo asíncrono, la creación de tareas y el polling "en procesamiento" no se facturan; **solo se factura una vez cuando se obtiene el token con éxito** (el mismo precio que en modo sincrónico). Por lo tanto, cancelar tareas que aún no se han completado durante la rotación no generará costos. `/captcha/tasks` es común para todas las interfaces de captcha (token y reconocimiento, como hcaptcha, recaptcha2, recaptcha3, recognition/\*, etc.), se puede hacer polling con el mismo `task_id`.

## Manejo de errores

Al llamar a la API, si encuentras un error, la API devolverá el código de error y la información correspondiente. Por ejemplo:

* `400 token_mismatched`: Solicitud incorrecta, posiblemente debido a parámetros faltantes o inválidos.
* `400 api_not_implemented`: Solicitud incorrecta, posiblemente debido a parámetros faltantes o inválidos.
* `401 invalid_token`: No autorizado, token de autorización inválido o faltante.
* `429 too_many_requests`: Demasiadas solicitudes, has superado el límite de tasa.
* `500 api_error`: Error interno del servidor, algo salió mal en el servidor.

### Ejemplo de respuesta de error

```json theme={null}
{
  "success": false,
  "error": {
    "code": "api_error",
    "message": "fetch failed"
  },
  "trace_id": "2cf86e86-22a4-46e1-ac2f-032c0f2a4e89"
}
```

## Conclusión

A través de este documento, usted ha aprendido cómo usar la API de reconocimiento del protocolo hCaptcha para permitir que los usuarios no tengan que reconocer y seleccionar imágenes de captcha de hCaptcha, simplemente enviando la clave del sitio web para lograr la decodificación automática en segundo plano y completar la verificación. Esperamos que este documento le ayude a integrar y utilizar mejor esta API. Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro equipo de soporte técnico.
