Reference

NextCaptcha'dan CaptchaAI'ye geçiş: API eşleme rehberi

NextCaptcha'dan CaptchaAI'ye geçmek göründüğünden daha küçük bir iş: değişen tek şey API'nin konuştuğu format. NextCaptcha, JSON tabanlı /createTask ve /getTaskResult uç noktalarını kullanır; CaptchaAI ise sektörde yaygın olan in.php/res.php formatını konuşur. Yani reCAPTCHA çözme mantığınız aynı kalır — yalnızca isteği nasıl gönderdiğiniz ve yanıtı nasıl ayrıştırdığınız değişir.

Pratikte geçiş üç mekanik değişikliğe iner:

  1. JSON gövdesi yerine form parametreleri gönderin.
  2. Sonucu POST yerine GET ile sorgulayın.
  3. Yanıt alanlarını (status / request) yeni biçime göre okuyun.

Değişmeyen taraflar da net:

  • Çözme mantığınız ve akış sırası aynı kalır.
  • sitekey / pageurl çıkarımı aynı kaynaktan gelir.
  • reCAPTCHA v2/v3 ve Turnstile gibi türler için token kullanımınız değişmez.

CaptchaAI'nin thread tabanlı planları BASIC ($15/ay, 5 thread) tarifesinden başlar. Bir müşteri otomasyonunu teslim tarihine yetiştirmeye çalışan bir Türk otomasyon geliştiricisi için bu öngörülebilirlik geçiş kararının pratik bir parçasıdır:

CaptchaAI planları USD üzerinden ve thread başına faturalanır; aylık maliyetiniz TL kurundaki dalgalanmadan etkilenmez.

Uç nokta eşlemesi: NextCaptcha ve CaptchaAI

İlk iş, üç temel çağrının yeni adreslerini bilmek:

Eylem NextCaptcha CaptchaAI
Görevi gönder POST /createTask POST https://ocr.captchaai.com/in.php
Sonuç al POST /getTaskResult GET https://ocr.captchaai.com/res.php
Bakiyeyi kontrol et POST /getBalance GET res.php?action=getbalance&key=KEY

İstek yapısı nasıl değişiyor

En görünür fark burada: NextCaptcha görevi bir JSON gövdesi içinde iç içe alanlarla gönderir, CaptchaAI ise düz form parametreleri bekler.

NextCaptcha gönderimi (JSON gövdesi)

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

CaptchaAI gönderimi (form parametreleri)

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

Parametre karşılıkları

NextCaptcha'nın iç içe task.* alanları, CaptchaAI'de düz parametrelere karşılık gelir. Alan adlarını birebir aşağıdaki gibi eşleyin:

NextCaptcha alanı CaptchaAI alanı Notlar
clientKey key API anahtarı
task.type method Aşağıdaki tür eşlemesine bakın
task.websiteURL pageurl Hedef sayfa URL'si
task.websiteKey googlekey veya sitekey Token tabanlı CAPTCHA'lar için site anahtarı
task.recaptchaDataSValue data-s reCAPTCHA veri parametresi
task.isInvisible invisible=1 Görünmez reCAPTCHA bayrağı
task.pageAction action reCAPTCHA v3 eylemi
taskId id Sorgulama için görev/CAPTCHA kimliği

Görev türü eşlemesi

NextCaptcha'nın task.type değerlerini CaptchaAI'nin method değerlerine çevirin:

NextCaptcha türü CaptchaAI yöntem + parametreler
RecaptchaV2TaskProxyless method=userrecaptcha
RecaptchaV2Task method=userrecaptcha + proxy, proxytype
ImageToTextTask method=base64 + body
TurnstileTaskProxyless method=turnstile

Not: CaptchaAI şu anda hCaptcha ve FunCaptcha çözümü sunmuyor. NextCaptcha'daki HCaptchaTask / HCaptchaTaskProxyless görevlerinin doğrudan karşılığı yoktur; bu akışları geçiş kapsamı dışında tutun. Desteklenen türler reCAPTCHA v2/v3 (Enterprise dâhil), Cloudflare Turnstile ve Challenge, GeeTest v3, görüntü/OCR, grid ve BLS'tir; CaptchaFox, Friendly Captcha ve Lemin ise beta aşamasındadır.

Yanıt biçimindeki farklar

Kodu taşırken en çok atlanan nokta yanıt ayrıştırmadır: NextCaptcha errorId/taskId alanlarını, CaptchaAI ise tek bir request alanını farklı anlamlarda kullanır. Kod örneklerine geçmeden önce bu iki tabloyu bilmek, taşımanın yarısını halleder.

Gönderim yanıtı

Alan NextCaptcha CaptchaAI
Başarı kontrolü errorId === 0 status === 1
Görev kimliği taskId (tamsayı) request (dize)
Hata mesajı errorDescription request (hata kodu dizisi)

Sorgulama yanıtı

Alan NextCaptcha CaptchaAI
Hazır kontrolü status === "ready" status === 1
Hazır değil status === "processing" request === "CAPCHA_NOT_READY"
Çözüm solution.gRecaptchaResponse request
Hata errorDescription request (hata kodu)

Kodu taşıma: önce ve sonra

Aşağıdaki dört örnek, aynı reCAPTCHA v2 çözme akışını iki API'de yan yana gösteriyor. Fark, gönderim biçimi ve sorgulama yönteminde yoğunlaşıyor.

Python — önce (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 — sonra (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 — önce (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 — sonra (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" };
}

Sık karşılaşılan hatalar ve çözümleri

Geçişin ilk gününde en çok bu dört hata görülür — hepsi de eski alan adlarının veya biçimin devam etmesinden kaynaklanır:

Sorun Sebep Çözüm
ERROR_KEY_DOES_NOT_EXIST Hâlâ NextCaptcha clientKey değerini gönderiyorsunuz CaptchaAI API anahtarınızla değiştirin
Yanıt ayrıştırma bozuluyor JSON yapısı farklı status (tam sayı) ve request alanlarını kontrol edecek şekilde güncelleyin
ERROR_WRONG_USER_KEY Hatalı biçimlendirilmiş API anahtarı Anahtar biçimini CaptchaAI panelinden doğrulayın
Görev türleri tanınmıyor NextCaptcha tür adlarını gönderiyorsunuz CaptchaAI method değerlerine eşleyin (yukarıdaki tabloya bakın)

Geçiş kontrol listesi

Geçişi tek seferde değil, doğrulanabilir adımlar hâlinde yapın:

Adım Durum
CaptchaAI hesabı açın ve bakiye yükleyin
Tüm createTask türlerini CaptchaAI method değerlerine eşleyin
clientKey yerine CaptchaAI API anahtarınızı koyun
Gönderimi JSON gövdeli POST'tan form POST'una çevirin
Sorgulamayı POST'tan sorgu parametreli GET'e çevirin
Yanıt ayrıştırmayı status/request biçimine göre güncelleyin
Paralel karşılaştırma testi çalıştırın
Üretim trafiğini CaptchaAI'ye geçirin

Sık sorulan sorular

Geçiş sırasında NextCaptcha ve CaptchaAI'yi bir süre paralel çalıştırabilir miyim?

Evet, önerilen yol da budur. Aynı sitekey ve pageurl ile iki servisi paralel çağırıp yanıtları karşılaştırın; token'ların hedef sitede kabul edildiğini doğruladıktan sonra üretim trafiğini CaptchaAI'ye kaydırın.

reCAPTCHA v3 ve görünmez reCAPTCHA için ek parametre gerekiyor mu?

reCAPTCHA v3'te action parametresini (NextCaptcha'daki task.pageAction karşılığı) ve gerekiyorsa min_score değerini ekleyin. Görünmez reCAPTCHA için invisible=1 bayrağını gönderin — method yine userrecaptcha kalır.

CaptchaAI, hCaptcha görevlerimi de karşılıyor mu?

Hayır. CaptchaAI şu anda hCaptcha (ve FunCaptcha) çözümü sunmuyor. NextCaptcha üzerinde hCaptcha akışlarınız varsa bunları geçiş kapsamının dışında tutun; desteklenen türler için birebir eşleme yukarıdaki tablolarda.

Proxy gerektiren görevleri nasıl taşırım?

NextCaptcha'da proxy görevleri RecaptchaV2Task gibi ayrı tür adlarıyla belirtilir. CaptchaAI'de ise aynı method değerine proxy=user:pass@host:port ve proxytype=HTTP parametrelerini eklemeniz yeterlidir; ayrı bir görev türü yoktur.

Sonraki adımlar

Entegrasyonunuzu bugün taşıyın — ücretsiz hesabınızı oluşturun ve ilk görevinizi birkaç dakikada gönderin.

İlgili rehberler:

Bu makale için yorumlar devre dışı bırakılmıştır.