Reference

Переход с NextCaptcha на CaptchaAI: полное руководство

NextCaptcha использует REST API на основе JSON с конечными точками /createTask и /getTaskResult. CaptchaAI использует широко распространенный формат in.php/PLACEHOLDER_TOKEN3ZZ. В этом руководстве описано точное сопоставление между двумя API.

Сопоставление конечных точек

Действие СледующийКапча CaptchaAI
Отправить задачу POST /createTask POST https://ocr.captchaai.com/in.php
Получить результат POST /getTaskResult GET https://ocr.captchaai.com/res.php
Проверить баланс POST /getBalance GET res.php?action=getbalance&key=KEY

Различия в структуре запроса

СледующаяОтправка капчи (тело JSON)

{
  "clientKey": "next_captcha_key",
  "task": {
    "type": "RecaptchaV2TaskProxyless",
    "websiteURL": "https://example.com",
    "websiteKey": "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
  }
}

CaptchaAI Отправить (параметры формы)

POST https://ocr.captchaai.com/in.php
key=YOUR_API_KEY&method=userrecaptcha&googlekey=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&pageurl=https://example.com&json=1

Перевод параметров

СледующееПоле капчи Поле CaptchaAI Примечания
clientKey key API-ключ
task.type method См. сопоставление типов ниже.
task.websiteURL pageurl URL целевой страницы
task.websiteKey googlekey или sitekey Ключ сайта для токена CAPTCHA
task.recaptchaDataSValue data-s параметр данных reCAPTCHA
task.isInvisible invisible=1 Невидимый флаг reCAPTCHA
task.pageAction action reCAPTCHA v3 действие
taskId id Task/captcha ID для опроса

Сопоставление типов задач

СледующийТип капчи CaptchaAI Метод + параметры
RecaptchaV2TaskProxyless method=userrecaptcha
RecaptchaV2Task method=userrecaptcha + proxy, proxytype
HCaptchaTaskProxyless method=hcaptcha
HCaptchaTask method=hcaptcha + proxy, proxytype
ImageToTextTask method=base64 + body
TurnstileTaskProxyless method=turnstile

Миграция кода

Python — Раньше (NextCaptcha)

import requests
import time

CLIENT_KEY = "your_nextcaptcha_key"
BASE_URL = "https://api.nextcaptcha.com"

def solve_recaptcha_v2(sitekey, pageurl):
    # Submit
    resp = requests.post(f"{BASE_URL}/createTask", json={
        "clientKey": CLIENT_KEY,
        "task": {
            "type": "RecaptchaV2TaskProxyless",
            "websiteURL": pageurl,
            "websiteKey": sitekey
        }
    })
    data = resp.json()
    if data.get("errorId") != 0:
        return {"error": data.get("errorDescription")}

    task_id = data["taskId"]

    # Poll
    for _ in range(60):
        time.sleep(5)
        result = requests.post(f"{BASE_URL}/getTaskResult", json={
            "clientKey": CLIENT_KEY,
            "taskId": task_id
        }).json()
        if result.get("status") == "ready":
            return {"solution": result["solution"]["gRecaptchaResponse"]}
        if result.get("errorId") != 0:
            return {"error": result.get("errorDescription")}

    return {"error": "TIMEOUT"}

Python — После (CaptchaAI)

import os
import time
import requests

API_KEY = os.environ["CAPTCHAAI_API_KEY"]

def solve_recaptcha_v2(sitekey, pageurl):
    # Submit — different endpoint and format
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": 1
    })
    data = resp.json()
    if data.get("status") != 1:
        return {"error": data.get("request")}

    captcha_id = data["request"]

    # Poll — GET instead of POST, different response format
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY,
            "action": "get",
            "id": captcha_id,
            "json": 1
        }).json()
        if result.get("status") == 1:
            return {"solution": result["request"]}
        if result.get("request") != "CAPCHA_NOT_READY":
            return {"error": result.get("request")}

    return {"error": "TIMEOUT"}

JavaScript — раньше (NextCaptcha)

const axios = require("axios");
const CLIENT_KEY = "your_nextcaptcha_key";
const BASE_URL = "https://api.nextcaptcha.com";

async function solveRecaptchaV2(sitekey, pageurl) {
  const submit = await axios.post(`${BASE_URL}/createTask`, {
    clientKey: CLIENT_KEY,
    task: {
      type: "RecaptchaV2TaskProxyless",
      websiteURL: pageurl,
      websiteKey: sitekey,
    },
  });
  if (submit.data.errorId !== 0) return { error: submit.data.errorDescription };

  const taskId = submit.data.taskId;

  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const poll = await axios.post(`${BASE_URL}/getTaskResult`, {
      clientKey: CLIENT_KEY,
      taskId,
    });
    if (poll.data.status === "ready") return { solution: poll.data.solution.gRecaptchaResponse };
    if (poll.data.errorId !== 0) return { error: poll.data.errorDescription };
  }
  return { error: "TIMEOUT" };
}

JavaScript — После (CaptchaAI)

const axios = require("axios");
const API_KEY = process.env.CAPTCHAAI_API_KEY;

async function solveRecaptchaV2(sitekey, pageurl) {
  const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
    params: { key: API_KEY, method: "userrecaptcha", googlekey: sitekey, pageurl, json: 1 },
  });
  if (submit.data.status !== 1) return { error: submit.data.request };

  const captchaId = submit.data.request;

  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const poll = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: captchaId, json: 1 },
    });
    if (poll.data.status === 1) return { solution: poll.data.request };
    if (poll.data.request !== "CAPCHA_NOT_READY") return { error: poll.data.request };
  }
  return { error: "TIMEOUT" };
}

Различия в формате ответа

Отправить ответ

Поле СледующийКапча CaptchaAI
Проверка успеха errorId === 0 status === 1
Идентификатор задачи taskId (целое число) request (строка)
Сообщение об ошибке errorDescription request (строка кода ошибки)

Ответ на опрос

Поле СледующийКапча CaptchaAI
Готовый чек status === "ready" status === 1
Не готов status === "processing" request === "CAPCHA_NOT_READY"
Решение solution.gRecaptchaResponse request
Ошибка errorDescription request (код ошибки)

Контрольный список миграции

Шаг Статус
Создайте учетную запись CaptchaAI и пополните средства.
Сопоставьте все типы createTask с методами CaptchaAI.
Замените clientKey на API-ключ CaptchaAI.
Обновить отправку из тела JSON POST в форму POST.
Обновить опрос с POST на GET с параметрами запроса.
Обновить разбор ответа (формат status/request)
Запустите параллельный сравнительный тест
Ограничить производственный трафик

Поиск неисправностей

| Проблема | Причина | Исправить |


Следующие шаги

  • CaptchaAI Quickstart: ваше первое решение CAPTCHA за 5 минут
  • Как решить reCAPTCHA v2 через API: пошаговое руководство
  • Как решить Cloudflare Turnstile через API
  • Как решить GeeTest v3 с помощью API
Комментарии для этой статьи отключены.