Reference

NextCaptcha'dan CaptchaAI'ye Geçiş: Tam Kılavuz

NextCaptcha, /createTask ve /getTaskResult uç noktalarına sahip JSON tabanlı bir REST API kullanır. CaptchaAI, yaygın olarak benimsenen in.php/res.php formatını kullanır. Bu kılavuz, iki API arasındaki tam eşlemeyi kapsar.

Uç Nokta Eşlemesi

Eylem SonrakiCaptcha 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

Talep Yapısı Farklılıkları

SonrakiCaptcha Gönderimi (JSON gövdesi)

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

CaptchaAI Gönder (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 Çevirisi

SonrakiCaptcha Alanı CaptchaAI Alanı Notlar
clientKey key API anahtarı
task.type method Aşağıdaki tür eşlemeye bakın
task.websiteURL pageurl Hedef sayfa URL'si
task.websiteKey googlekey veya sitekey Belirteç 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 Oylama için Task/captcha kimliği

Görev Türü Eşleme

SonrakiCaptcha Türü CaptchaAI Yöntem + Parametreler
RecaptchaV2TaskProxyless method=userrecaptcha
RecaptchaV2Task method=userrecaptcha + proxy, proxytype
HCaptchaTaskProxyless method=hcaptcha
HCaptchaTask method=hcaptcha + proxy, proxytype
ImageToTextTask method=base64 + body
TurnstileTaskProxyless method=turnstile

Kod Taşıma

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

Yanıt Formatı Farklılıkları

Yanıt Gönder

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

Anket Yanıtı

Alan SonrakiCaptcha 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)

Geçiş Kontrol Listesi

Adım Durum
CaptchaAI hesabı oluşturun ve para ekleyin
Tüm createTask türlerini CaptchaAI yöntemleriyle eşleyin
clientKey'yi CaptchaAI API anahtarıyla değiştirin
POST'u oluşturmak için JSON gövdesi POST'tan gönderimi güncelleyin
Sorgu parametreleriyle anketi POST'tan GET'e güncelleyin
Yanıt ayrıştırmayı güncelleyin (status/request biçimi)
Paralel karşılaştırma testini çalıştırın
Üretim trafiğini kesin

Sorun giderme

Sorun Sebep Düzeltme
ERROR_KEY_DOES_NOT_EXIST NextCaptcha clientKey'yi kullanma CaptchaAI API anahtarıyla değiştirin
Yanıt ayrıştırma kesintileri Farklı JSON yapısı status (tam sayı) ve request alanlarını kontrol etmek için güncelleme
ERROR_WRONG_USER_KEY Hatalı biçimlendirilmiş API anahtarı CaptchaAI panosundan anahtar biçimini doğrulayın
Görev türleri tanınmıyor NextCaptcha türü adlarını kullanma CaptchaAI method değerleriyle eşleyin (yukarıdaki tabloya bakın)

SSS

NextCaptcha her şey için JSON POST'u kullanır. CaptchaAI form kodlu verilere ihtiyaç duyuyor mu?

CaptchaAI hem form kodlu (application/x-www-form-urlencoded) hem de JSON isteklerini kabul eder. in.php uç noktası form verileriyle çalışır ve yoklama basit GET parametrelerini kullanır.

Geçiş sırasında proxy görevlerini nasıl halledebilirim?

NextCaptcha'da proxy görevleri RecaptchaV2Task gibi tür adlarını kullanır. CaptchaAI'de proxy=user:pass@host:port ve proxytype=HTTP parametrelerini aynı yönteme ekleyin.

Geri arama/webhook desteği ne olacak?

CaptchaAI, pingback parametresini destekler - bir URL sağlayın ve CaptchaAI, NextCaptcha'nın geri çağırma işlevine benzer şekilde hazır olduğunda sonucu POST edecektir.

Sonraki Adımlar

CaptchaAI ile daha hızlı çözüm süreleri elde edin —hesabınızı oluşturunve entegrasyonunuzu birkaç dakika içinde değiştirin.

İlgili kılavuzlar:

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