Referenz

Migration von NextCaptcha zu CaptchaAI: Vollständige Anleitung

NextCaptcha verwendet eine JSON-basierte REST-API mit den Endpunkten /createTask und /getTaskResult. CaptchaAI verwendet das weit verbreitete in.php/BEISPIEL_TOKEN-Format. Dieser Leitfaden behandelt die genaue Zuordnung zwischen den beiden APIs.

Endpunktzuordnung

Aktion NächstesCaptcha CaptchaAI
Aufgabe abschicken POST /createTask POST https://ocr.captchaai.com/in.php
Ergebnis erhalten POST /getTaskResult GET https://ocr.captchaai.com/res.php
Überprüfen Sie den Kontostand POST /getBalance GET res.php?action=getbalance&key=KEY

Unterschiede in der Anforderungsstruktur

NextCaptcha Submit (JSON-Text)

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

CaptchaAI Senden (Formularparameter)

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

Parameterübersetzung

NächstesCaptcha-Feld CaptchaAI-Feld Notizen
clientKey key API-Schlüssel
task.type method Siehe Typzuordnung unten
task.websiteURL pageurl URL der Zielseite
task.websiteKey googlekey oder sitekey Site-Schlüssel für Token-CAPTCHAs
task.recaptchaDataSValue data-s reCAPTCHA-Datenparameter
task.isInvisible invisible=1 Unsichtbare reCAPTCHA-Flagge
task.pageAction action reCAPTCHA v3-Aktion
taskId id Task/captcha-ID für die Abfrage

Aufgabentypzuordnung

NextCaptcha-Typ CaptchaAI-Methode + Parameter
RecaptchaV2TaskProxyless method=userrecaptcha
RecaptchaV2Task method=userrecaptcha + proxy, proxytype
HCaptchaTaskProxyless method=hcaptcha
HCaptchaTask method=hcaptcha + proxy, proxytype
ImageToTextTask method=base64 + body
TurnstileTaskProxyless method=turnstile

Codemigration

Python – Vorher (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 – Nachher (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 – Vorher (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 – Nachher (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" };
}

Unterschiede im Antwortformat

Antwort senden

Feld NächstesCaptcha CaptchaAI
Erfolgskontrolle errorId === 0 status === 1
Aufgaben-ID taskId (Ganzzahl) request (Zeichenfolge)
Fehlermeldung errorDescription request (Fehlercodezeichenfolge)

Umfrageantwort

Feld NächstesCaptcha CaptchaAI
Bereit prüfen status === "ready" status === 1
Nicht bereit status === "processing" request === "CAPCHA_NOT_READY"
Lösung solution.gRecaptchaResponse request
Fehler errorDescription request (Fehlercode)

Checkliste für die Migration

Schritt Status
Erstellen Sie ein CaptchaAI-Konto und fügen Sie Geld hinzu
Ordnen Sie alle createTask-Typen den CaptchaAI-Methoden zu
Ersetzen Sie clientKey durch den API-Schlüssel CaptchaAI
Aktualisieren Sie die Übermittlung vom JSON-Körper POST auf den Formular-POST
Aktualisieren Sie die Umfrage von POST auf GET mit Abfrageparametern
Antwortanalyse aktualisieren (Format „status/request“)
Führen Sie einen parallelen Vergleichstest durch
Reduzieren Sie den Produktionsverkehr

Fehlerbehebung

Problem Ursache Lösung
Ergebnis passt nicht zum eigenen Fall Solver-Typ oder Eingabeparameter wurden falsch auf den Zieltyp gemappt Vergleiche Zielseite, Solver-Methode und Pflichtparameter noch einmal systematisch
Beispiel läuft, aber Produktion scheitert Session, Header oder Proxy-Kontext weichen vom Test ab Übertrage erfolgreiche Testbedingungen möglichst unverändert in den Live-Workflow
Fehler bleiben unklar Logs enthalten zu wenig Kontext für eine belastbare Diagnose Protokolliere Solver-Typ, Latenz, Fehlercode und Downstream-Reaktion gemeinsam

Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.