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:
- JSON gövdesi yerine form parametreleri gönderin.
- Sonucu POST yerine GET ile sorgulayın.
- 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/HCaptchaTaskProxylessgö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: