EndCaptcha, benzersiz yöntem adlarına sahip bir SOAP/XML-based API'sini kullanır. CaptchaAI, in.php/res.php uç noktalarıyla daha basit bir REST API kullanır. Bu kılavuz, her EndCaptcha çağrısını CaptchaAI eşdeğeriyle eşleştirir.
API Mimarisi Farkı
| Görünüş | EndCaptcha | CaptchaAI |
|---|---|---|
| Protokol | SOAP/XML veya HTTP POST | HTTP POST/GET (REST) |
| Gönder | /Captcha/Upload veya WSDL |
https://ocr.captchaai.com/in.php |
| Sonuç | /Captcha/GetText veya WSDL |
https://ocr.captchaai.com/res.php |
| Yetki | Kullanıcı Adı + Şifre | API anahtarı |
| Yanıt | XML/custom | JSON (json=1) veya düz metin |
Parametre Eşleme
| EndCaptcha Parametresi | CaptchaAI Parametresi | Notlar |
|---|---|---|
username |
key |
CaptchaAI tek API anahtarı kullanır |
password |
— | Gerekli değil; API anahtarı kimlik doğrulamayı kapsar |
captchaData (base64) |
body (base64) |
Aynı base64 görüntü verileri |
captchaType |
method |
Farklı tür tanımlayıcıları |
siteKey |
googlekey |
reCAPTCHA türleri için |
pageUrl |
pageurl |
Aynı konsept, farklı kasa |
captchaId |
id |
Yoklama için görev kimliği |
CAPTCHA Tür Eşlemesi
| EndCaptcha Türü | CaptchaAI Yöntemi | CaptchaAI Parametreleri |
|---|---|---|
| Resim CAPTCHA'sı | method=base64 |
body={base64_image} |
| reCAPTCHA v2 | method=userrecaptcha |
googlekey, pageurl |
| hCaptcha | method=hcaptcha |
sitekey, pageurl |
Kod Taşıma
Python — Önce (EndCaptcha)
import requests
USERNAME = "your_endcaptcha_user"
PASSWORD = "your_endcaptcha_pass"
def solve_image_endcaptcha(image_base64):
# EndCaptcha image solve
resp = requests.post("https://api.endcaptcha.com/Captcha/Upload", data={
"username": USERNAME,
"password": PASSWORD,
"captchaData": image_base64,
"captchaType": "1"
})
result = resp.json()
captcha_id = result.get("captchaId")
import time
for _ in range(30):
time.sleep(5)
poll = requests.post("https://api.endcaptcha.com/Captcha/GetText", data={
"username": USERNAME,
"password": PASSWORD,
"captchaId": captcha_id
})
poll_result = poll.json()
if poll_result.get("text"):
return {"solution": poll_result["text"]}
if poll_result.get("error"):
return {"error": poll_result["error"]}
return {"error": "TIMEOUT"}
Python — Sonra (CaptchaAI)
import os
import time
import requests
API_KEY = os.environ["CAPTCHAAI_API_KEY"]
def solve_image_captchaai(image_base64):
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY,
"method": "base64",
"body": image_base64,
"json": 1
})
data = resp.json()
if data.get("status") != 1:
return {"error": data.get("request")}
captcha_id = data["request"]
for _ in range(30):
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"}
Python — reCAPTCHA v2 (CaptchaAI)
def solve_recaptcha_v2(sitekey, pageurl):
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"]
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 (EndCaptcha)
const axios = require("axios");
const USERNAME = "your_endcaptcha_user";
const PASSWORD = "your_endcaptcha_pass";
async function solveImageEndCaptcha(imageBase64) {
const submit = await axios.post("https://api.endcaptcha.com/Captcha/Upload", {
username: USERNAME,
password: PASSWORD,
captchaData: imageBase64,
captchaType: "1",
});
const captchaId = submit.data.captchaId;
for (let i = 0; i < 30; i++) {
await new Promise((r) => setTimeout(r, 5000));
const poll = await axios.post("https://api.endcaptcha.com/Captcha/GetText", {
username: USERNAME,
password: PASSWORD,
captchaId,
});
if (poll.data.text) return { solution: poll.data.text };
if (poll.data.error) return { error: poll.data.error };
}
return { error: "TIMEOUT" };
}
JavaScript — Sonra (CaptchaAI)
const axios = require("axios");
const API_KEY = process.env.CAPTCHAAI_API_KEY;
async function solveImageCaptchaAI(imageBase64) {
const submit = await axios.post("https://ocr.captchaai.com/in.php", null, {
params: { key: API_KEY, method: "base64", body: imageBase64, json: 1 },
});
if (submit.data.status !== 1) return { error: submit.data.request };
const captchaId = submit.data.request;
for (let i = 0; i < 30; 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" };
}
İzlenecek Temel Farklılıklar
| Alan | EndCaptcha | CaptchaAI |
|---|---|---|
| Kimlik doğrulama | Kullanıcı adı + şifre çifti | Tek API anahtarı |
| Hata formatı | error alanına sahip özel JSON |
Hata kodlu standart request alanı |
| Oylama | Uç noktayı ayırmak için POST | Sorgu parametreleriyle res.php'ye GET |
| Bakiye kontrolü | Ayrı SABUN yöntemi | res.php?action=getbalance&key=KEY |
| Kötü rapor et | Ayrı yöntem | res.php?action=reportbad&id=ID&key=KEY |
Geçiş Kontrol Listesi
| Adım | Durum |
|---|---|
| CaptchaAI hesabı oluştur | ☐ |
| Tüm EndCaptcha çağrılarını CaptchaAI eşdeğerleriyle eşleyin | ☐ |
| Yetkilendirmeyi değiştir (kullanıcı adı/password → API anahtarı) | ☐ |
Gönderme uç noktasını güncelle (/Captcha/Upload → /in.php) |
☐ |
Anket bitiş noktasını güncelle (/Captcha/GetText → /res.php) |
☐ |
| Yanıt ayrıştırmayı güncelle | ☐ |
| Her iki sağlayıcıyla paralel test yapın | ☐ |
| Üretim trafiğini değiştir | ☐ |
| EndCaptcha kimlik bilgilerini kaldırın | ☐ |
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
ERROR_KEY_DOES_NOT_EXIST |
API anahtarı yerine EndCaptcha kullanıcı adını kullanma | Kontrol panelinden CaptchaAI API anahtarını kullanın |
| Yanıt ayrıştırma başarısız oluyor | Farklı JSON yapısı | status ve request alanlarını kontrol etmek için güncelleme |
method parametresi eksik |
EndCaptcha captchaType numaralandırmasını kullanıyor |
CaptchaAI yöntem adlarıyla eşleme (base64, userrecaptcha, vb.) |
| reCAPTCHA'da zaman aşımı | Farklı varsayılan zaman aşımları | Belirteç CAPTCHA'ları için yoklamayı 60 yineleme × 5 saniyeye ayarlayın |
SSS
Yanıt formatı EndCaptcha ve CaptchaAI arasında aynı mı?
Hayır. EndCaptcha, captchaId ve text gibi alanlarla özel JSON döndürür. CaptchaAI, {"status": 1, "request": "..."}'yi döndürür. Yanıt ayrıştırmanızı güncellemeniz gerekecek.
Aynı proxy yapılandırmasını kullanabilir miyim?
Evet. CaptchaAI, çoğu CAPTCHA hizmetine benzer şekilde proxy=user:pass@host:port ve proxytype=HTTP|SOCKS5 parametrelerini kabul eder.
EndCaptcha'nın SOAP/WSDL uç noktası ne olacak?
CaptchaAI'nin SOAP API'si yoktur. REST API (in.php/res.php) daha basittir ve geniş çapta desteklenir. Çoğu SOAP çağrısı tek bir HTTP POST veya GET ile eşleşir.
İlgili Makaleler
Sonraki Adımlar
CAPTCHA çözümünüzü CaptchaAI'nin REST API'si ile basitleştirin —API anahtarınızı alınve bugün göç ediyoruz.
İlgili kılavuzlar:
- API Uç Nokta Eşleme Referansı
- AZCaptcha'dan geçiş yapın
- Paralel Çalıştırma Testi