Reference

AZCaptcha'dan CaptchaAI'ye geçiş: 4 adımda taşıma

AZCaptcha üzerinde çalışan bir entegrasyonu CaptchaAI'ye taşımak için kodunuzu baştan yazmanıza gerek yok. İki servis de 2Captcha uyumlu aynı API sözleşmesini konuşur; pratikte yalnızca temel URL'yi ve API anahtarını değiştirir, istek gövdesini ve yanıt biçimini olduğu gibi bırakırsınız. Tek bir kod tabanında bu, doğrulama için bir paralel test dahil, çoğu zaman 15–30 dakikalık bir iştir.

Bu rehber taşımayı dört adımda ilerletir: API anahtarını alın, kodu güncelleyin, sağlayıcıyı tek bir soyutlamanın arkasına alın ve iki servisi yan yana test edin. Hangi parametrelerin aynı kaldığını gösteren uç nokta ve parametre eşleme tablolarını da başvuru için yazının sonunda bulacaksınız.

Neden CaptchaAI'ye geçiliyor?

Sağlayıcı değiştirmenin arkasında genellikle üç motivasyon olur:

  • Maliyet öngörülebilirliği: CaptchaAI thread tabanlı çalışır — solve başına değil, aynı anda açık olan eşzamanlı istek (thread) sayısı üzerinden ücretlendirilir ve her planda thread başına sınırsız çözüm gelir. Planlar BASIC ($15/ay, 5 thread) ile başlar; hacim büyüdükçe ADVANCE ($90/ay, 50 thread) veya PREMIUM ($170/ay, 100 thread) tarafına geçersiniz.
  • Sabit USD fiyatlandırma: Türkiye'deki geliştiriciler için aylık sabit USD ücret, TL kurundaki dalgalanmadan bağımsız bir bütçe demektir. Müşteri otomasyonlarını teslim tarihine yetiştiren freelance geliştiriciler ya da düzenli veri toplayan ekipler için bu, planlamayı belirgin biçimde kolaylaştırır.
  • Tek satırlık taşınabilirlik: 2Captcha uyumlu API sayesinde mevcut kodunuzu neredeyse hiç değiştirmeden dener, memnun kalmazsanız kolayca geri dönersiniz.

KVKK notu: Kişisel veri topluyorsanız kazınan verinin KVKK kapsamına girebileceğini unutmayın ve CAPTCHA çözümünü yalnızca yetkili QA ve veri toplama akışlarında kullanın.

Geçiş adımları

Adım 1: CaptchaAI API anahtarınızı alın

  1. captchaai.com üzerinden ücretsiz hesap açın.
  2. Hesabınıza bakiye ekleyin.
  3. API anahtarınızı kontrol panelinden kopyalayın.

Adım 2: Kodu güncelleyin

Kodda değişen tek şey uç nokta URL'leridir. Önce–sonra karşılaştırmalarında AZCaptcha satırlarını CaptchaAI karşılıklarıyla değiştirmeniz yeterli. Bu arada API anahtarını sabit yazmak yerine bir ortam değişkeninden okumak da iyi bir alışkanlıktır.

Python — önce (AZCaptcha)

import requests

API_KEY = "your_azcaptcha_key"

def solve_recaptcha(sitekey, pageurl):
    # Submit
    resp = requests.post("https://azcaptcha.com/in.php", data={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": 1
    })
    data = resp.json()
    if data["status"] != 1:
        return {"error": data["request"]}

    captcha_id = data["request"]

    # Poll
    import time
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://azcaptcha.com/res.php", params={
            "key": API_KEY, "action": "get", "id": captcha_id, "json": 1
        }).json()
        if result["status"] == 1:
            return {"solution": result["request"]}
        if result["request"] != "CAPCHA_NOT_READY":
            return {"error": result["request"]}

    return {"error": "TIMEOUT"}

Python — sonra (CaptchaAI)

import os
import time
import requests

API_KEY = os.environ["CAPTCHAAI_API_KEY"]  # Changed: use env var

def solve_recaptcha(sitekey, pageurl):
    # Submit — only URL changed
    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 — only URL changed
    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 (AZCaptcha)

const axios = require("axios");
const API_KEY = "your_azcaptcha_key";

async function solveRecaptcha(sitekey, pageurl) {
  const submit = await axios.post("https://azcaptcha.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://azcaptcha.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" };
}

JavaScript — sonra (CaptchaAI)

const axios = require("axios");
const API_KEY = process.env.CAPTCHAAI_API_KEY;  // Changed: env var

async function solveRecaptcha(sitekey, pageurl) {
  // Only URLs changed
  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" };
}

Adım 3: Sağlayıcıyı soyutlayın

Daha güvenli bir geçiş için sağlayıcıyı tek bir sınıfın arkasına alın. Böylece iki servis arasında geçmek tek satırlık bir değişikliğe iner; ileride başka bir sağlayıcı denemek isterseniz kodun geri kalanına dokunmanız gerekmez.

import os
import time
import requests


class CaptchaProvider:
    def __init__(self, base_url, api_key):
        self.submit_url = f"{base_url}/in.php"
        self.result_url = f"{base_url}/res.php"
        self.api_key = api_key
        self.session = requests.Session()

    def solve(self, sitekey, pageurl, method="userrecaptcha"):
        resp = self.session.post(self.submit_url, data={
            "key": self.api_key,
            "method": method,
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": 1
        })
        data = resp.json()
        if data.get("status") != 1:
            return {"error": data.get("request")}

        captcha_id = data["request"]
        for _ in range(60):
            time.sleep(5)
            result = self.session.get(self.result_url, params={
                "key": self.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"}


# Switch by changing one line:
# provider = CaptchaProvider("https://azcaptcha.com", "old_key")
provider = CaptchaProvider(
    "https://ocr.captchaai.com",
    os.environ["CAPTCHAAI_API_KEY"]
)

Adım 4: Paralel test çalıştırın

Üretime geçmeden önce iki sağlayıcıyı aynı girdilerle yan yana çalıştırın. Aşağıdaki test her iki servis için başarı sayısını ve ortalama çözüm süresini yazdırır; istatistiksel olarak anlamlı bir karşılaştırma için en az 50 çözüm çalıştırmanızı öneririz.

def parallel_test(sitekey, pageurl, runs=10):
    azcaptcha = CaptchaProvider("https://azcaptcha.com", "old_key")
    captchaai = CaptchaProvider(
        "https://ocr.captchaai.com",
        os.environ["CAPTCHAAI_API_KEY"]
    )

    results = {"azcaptcha": [], "captchaai": []}

    for i in range(runs):
        start = time.time()
        az_result = azcaptcha.solve(sitekey, pageurl)
        results["azcaptcha"].append({
            "success": "solution" in az_result,
            "time": time.time() - start
        })

        start = time.time()
        cai_result = captchaai.solve(sitekey, pageurl)
        results["captchaai"].append({
            "success": "solution" in cai_result,
            "time": time.time() - start
        })

    for provider, data in results.items():
        successes = sum(1 for r in data if r["success"])
        avg_time = sum(r["time"] for r in data) / len(data)
        print(f"{provider}: {successes}/{runs} success, {avg_time:.1f}s avg")

Sık sorulan sorular

Mevcut kodumu baştan yazmam gerekir mi?

Hayır. İki servis de 2Captcha uyumlu API kullandığından çoğu durumda temel URL'yi ve API anahtarını değiştirmek yeterlidir. İstek parametreleri ve yanıt biçimi aynı kalır.

Geçiş sırasında kesinti yaşar mıyım?

Gerekmiyor. Sağlayıcıyı bir soyutlamanın arkasına alıp paralel testi çalıştırdıktan sonra üretim trafiğini tek satırlık bir değişiklikle yönlendirir, 24 saat izler ve AZCaptcha anahtarını en son kapatırsınız.

CaptchaAI hangi CAPTCHA türlerini çözüyor?

reCAPTCHA v2 ve v3 (Enterprise dahil), Cloudflare Turnstile ve Cloudflare doğrulama akışı, GeeTest v3, görüntü/OCR, grid ve BLS türlerini destekler. CaptchaFox (beta), Friendly Captcha (beta) ve Lemin (beta) beta aşamasındadır. hCaptcha ve FunCaptcha desteklenmez; GeeTest v4 için destek çok yakında.

Fiyatlandırma AZCaptcha'dan farklı mı işliyor?

CaptchaAI solve başına değil, eşzamanlı thread üzerinden ücretlendirir ve her planda thread başına sınırsız çözüm sunar. Planlar BASIC ($15/ay, 5 thread) ile başlar; güncel fiyatlar için captchaai.com/pricing sayfasına bakın.

AZCaptcha anahtarımı hemen kapatmalı mıyım?

Hayır. Önce paralel testi ve 24 saatlik izlemeyi tamamlayın. Başarı oranı ve çözüm süresi beklediğiniz düzeydeyse eski anahtarı en son adımda kullanımdan kaldırın.

Geçiş kontrol listesi

Taşımayı düzenli ilerletmek için şu listeyi izleyin:

Adım Durum
CaptchaAI hesabı açın ve bakiye yükleyin
Tüm dosyalarda temel URL'yi değiştirin
API anahtarını güncelleyin (ortam değişkeni kullanın)
Paralel testi çalıştırın (10+ çözüm)
Başarı oranlarını karşılaştırın
Çözüm sürelerini karşılaştırın
Yeni uç noktalar için izleme ve uyarıları güncelleyin
Üretim trafiğini yönlendirin
24 saat boyunca izleyin
AZCaptcha anahtarını kullanımdan kaldırın

Sorun giderme

En sık karşılaşılan sorunlar ve hızlı çözümleri:

Sorun Sebep Düzeltme
ERROR_KEY_DOES_NOT_EXIST Yanlış API anahtarı CaptchaAI API anahtarını kontrol panelinden doğrulayın
ERROR_ZERO_BALANCE Yeni hesapta bakiye yok captchaai.com'da bakiye ekleyin
Farklı hata kodları Küçük hata kodu farklılıkları Hata kodlarını eşleyin; çoğu birebir aynıdır
Çözüm oranı farklı çıkıyor Farklı çözücü havuzları Anlamlı karşılaştırma için 50+ test çözümü çalıştırın

Uç nokta eşlemesi

İki servisin uç noktaları birebir aynı kalıba oturur; yalnızca alan adı değişir. AZCaptcha azcaptcha.com altında, CaptchaAI ise ocr.captchaai.com altında yanıt verir.

İşlem AZCaptcha CaptchaAI
Görev gönderme https://azcaptcha.com/in.php https://ocr.captchaai.com/in.php
Sonuç alma https://azcaptcha.com/res.php https://ocr.captchaai.com/res.php
Bakiye sorgulama res.php?action=getbalance res.php?action=getbalance
Hatalı çözüm bildirme res.php?action=reportbad res.php?action=reportbad

Parametre uyumluluğu

Parametrelerin büyük çoğunluğu hiç değişmeden çalışır. Dikkat etmeniz gereken tek gerçek fark API anahtarıdır — CaptchaAI için ayrı bir anahtar alırsınız. method, googlekey, pageurl ve proxy alanları aynı biçimi korur.

Parametre AZCaptcha CaptchaAI Not
key API anahtarı API anahtarı Farklı anahtar — kendi anahtarınızı captchaai.com'dan alın
method userrecaptcha userrecaptcha Aynı
googlekey sitekey sitekey Aynı
pageurl sayfa URL'si sayfa URL'si Aynı
json 1 1 Aynı
proxy user:pass@host:port user:pass@host:port Aynı format
proxytype HTTP/SOCKS5 HTTP/SOCKS5 Aynı

Sonraki adımlar

Daha öngörülebilir maliyet ve kararlı çözüm için bugün geçin — CaptchaAI API anahtarınızı alın ve dakikalar içinde taşıyın.

İlgili rehberler:

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