Reference

Migrasi dari NextCaptcha ke CaptchaAI: Panduan Pemetaan API

Migrasi NextCaptcha ke CaptchaAI cuma soal menukar format request (JSON → form-encoded) dan cara baca respons (errorId/statusstatus/request). Logika solver Anda tidak perlu ditulis ulang.

Alurnya tetap sama seperti kebanyakan solver: kirim task → simpan task ID → polling → pakai token. Yang berubah cuma endpoint, parameter, dan struktur respons — setelah tabel pemetaan di bawah, sisanya cari-ganti.

Perbedaan arsitektur API NextCaptcha vs CaptchaAI

NextCaptcha memakai endpoint JSON /createTask dan /getTaskResult; CaptchaAI memakai format in.php/res.php yang lebih umum di industri solver.

Aksi NextCaptcha CaptchaAI
Submit task POST /createTask POST https://ocr.captchaai.com/in.php
Ambil hasil POST /getTaskResult GET https://ocr.captchaai.com/res.php
Cek saldo POST /getBalance GET res.php?action=getbalance&key=KEY

Body JSON bertingkat vs parameter form datar

NextCaptcha membungkus data dalam objek JSON dengan task sebagai sub-objek:

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

CaptchaAI meratakannya jadi parameter form di satu baris, tanpa nesting:

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

Kenapa tim otomatisasi Indonesia mempertimbangkan pindah

Banyak pengembang scraping Indonesia — freelancer maupun agensi price-monitoring bermargin tipis — menganggap body JSON bertingkat NextCaptcha bikin satu task lebih ribet dari perlunya. CaptchaAI menagih per thread konkuren, bukan per solve: BASIC ($15/bulan, 5 thread) sudah mencakup solve tak terbatas per thread, naik sampai VIP-3 ($7,500/bulan, 5.000 thread).

Untuk latency, deploy worker dekat AWS ap-southeast-3 (Jakarta) atau ap-southeast-1 (Singapura).

Pemetaan parameter NextCaptcha ke CaptchaAI

Field bertingkat NextCaptcha menjadi parameter form datar:

Field NextCaptcha Field CaptchaAI Catatan
clientKey key API key
task.type method Lihat tabel tipe task
task.websiteURL pageurl URL halaman target
task.websiteKey googlekey atau sitekey Sitekey CAPTCHA
task.recaptchaDataSValue data-s Parameter data-s reCAPTCHA
task.isInvisible invisible=1 Flag reCAPTCHA invisible
task.pageAction action Aksi reCAPTCHA v3
taskId id Task ID untuk polling

Pemetaan tipe task

Tipe task NextCaptcha Method CaptchaAI + parameter
RecaptchaV2TaskProxyless method=userrecaptcha
RecaptchaV2Task method=userrecaptcha + proxy, proxytype
ImageToTextTask method=base64 + body
TurnstileTaskProxyless method=turnstile
HCaptchaTaskProxyless / HCaptchaTask Tidak ada padanan — lihat catatan di bawah

Cek dulu: hCaptcha dan FunCaptcha belum didukung, dan GeeTest v4 masih segera hadir. Kalau task Anda memakai HCaptchaTaskProxyless/HCaptchaTask, siapkan solusi terpisah.

Perbedaan format respons

Respons submit

Field NextCaptcha CaptchaAI
Cek sukses errorId === 0 status === 1
Task ID taskId (integer) request (string)
Pesan error errorDescription request (string kode error)

Respons polling

Field NextCaptcha CaptchaAI
Cek siap status === "ready" status === 1
Belum siap status === "processing" request === "CAPCHA_NOT_READY"
Solusi solution.gRecaptchaResponse request
Error errorDescription request (kode error)

Migrasi kode: sebelum dan sesudah

Python — sebelum (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 — sesudah (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 — sebelum (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 — sesudah (CaptchaAI)

Perubahan sama seperti versi Python di atas.

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" };
}

Checklist migrasi langkah demi langkah

  1. Buat akun CaptchaAI dan isi saldo.
  2. Petakan semua tipe createTask ke method CaptchaAI.
  3. Ganti clientKey dengan API key CaptchaAI.
  4. Perbarui submit dari POST JSON body ke POST form-encoded.
  5. Perbarui polling dari POST ke GET dengan query parameter.
  6. Perbarui parsing respons (format status/request).
  7. Jalankan uji perbandingan paralel.
  8. Alihkan trafik produksi secara bertahap.

Mengatasi masalah umum

Masalah Penyebab Solusi
ERROR_KEY_DOES_NOT_EXIST Masih memakai clientKey NextCaptcha Ganti dengan API key CaptchaAI dari dashboard
Parsing respons berhenti bekerja Struktur JSON berbeda Perbarui kode untuk memeriksa field status (integer) dan request
ERROR_WRONG_USER_KEY Format API key salah Verifikasi format key di dashboard CaptchaAI
Tipe task tidak dikenali Masih memakai nama tipe NextCaptcha Petakan ke method CaptchaAI (lihat tabel tipe task)

Pertanyaan umum

Apakah CaptchaAI mendukung semua tipe CAPTCHA yang saya pakai di NextCaptcha?

Tergantung tipenya. reCAPTCHA, Turnstile, GeeTest v3, image/OCR, dan grid didukung penuh, plus CaptchaFox, Friendly Captcha, dan Lemin (beta). hCaptcha dan FunCaptcha belum didukung, GeeTest v4 masih segera hadir.

Task saya di NextCaptcha pakai proxy — bagaimana di CaptchaAI?

NextCaptcha pakai tipe terpisah seperti RecaptchaV2Task. CaptchaAI tambahkan proxy=user:pass@host:port dan proxytype=HTTP ke method yang sama.

Bagaimana model penagihan CaptchaAI dibanding harga per-task NextCaptcha?

Per thread konkuren dengan solve tak terbatas, bukan per task selesai. Paket mulai BASIC ($15/bulan, 5 thread).

Langkah selanjutnya

Ambil API key CaptchaAI Anda dan alihkan integrasi dalam beberapa menit.

Panduan terkait:

Komentar dinonaktifkan untuk artikel ini.