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
- captchaai.com üzerinden ücretsiz hesap açın.
- Hesabınıza bakiye ekleyin.
- 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: