CaptchaAI basit metin tabanlı yanıtlar kullanır. Bu referans, ayrıştırma örnekleriyle birlikte karşılaşacağınız her yanıt formatını kapsar.
Uç Noktayı Gönder (in.php)
Başarı Yanıtı
OK|TASK_ID
Örnek: OK|73548291
Hata Yanıtı
ERROR_CODE
Örnek: ERROR_WRONG_USER_KEY
Ayrıştırma
resp = requests.get("https://ocr.captchaai.com/in.php", params={...})
if resp.text.startswith("OK|"):
task_id = resp.text.split("|")[1]
else:
error = resp.text
raise Exception(f"Submit failed: {error}")
const resp = await axios.get("https://ocr.captchaai.com/in.php", { params });
if (resp.data.startsWith("OK|")) {
const taskId = resp.data.split("|")[1];
} else {
throw new Error(`Submit failed: ${resp.data}`);
}
Anket Bitiş Noktası (res.php)
Hazır Değil Yanıtı
CAPCHA_NOT_READY
Görev hâlâ işleniyor. 5 saniye bekleyin ve tekrar anket yapın.
Başarı — Token Tabanlı CAPTCHA'lar
reCAPTCHA, Turnstile, hCaptcha ve benzeri için:
OK|03AGdBq24PBCbw...long_token_string
Başarı — Image/OCR CAPTCHA'lar
OK|abc123
OK|'den sonraki metin, görüntüden tanınan metindir.
Başarı – GeeTest
OK|challenge:abc123,validate:def456,seccode:ghi789
Her alanı ayrıştırın:
if result.text.startswith("OK|"):
data = result.text.split("|")[1]
parts = dict(item.split(":") for item in data.split(","))
challenge = parts["challenge"]
validate = parts["validate"]
seccode = parts["seccode"]
Başarı — Cloudflare doğrulama akışı
qa_session_cookie çerez değerini ve kullanıcı aracısını döndürür:
OK|qa_session_cookie=abc123;user_agent=Mozilla/5.0...
Hata Yanıtı
ERROR_CODE
Ayrıştırma Şablonu
def parse_result(response_text):
if response_text == "CAPCHA_NOT_READY":
return {"status": "pending"}
if response_text.startswith("OK|"):
return {"status": "solved", "result": response_text.split("|", 1)[1]}
return {"status": "error", "error": response_text}
Denge Uç Noktası
GET https://ocr.captchaai.com/res.php?key=API_KEY&action=getbalance
Yanıt:
1.234
Bakiyenizi ABD doları cinsinden temsil eden ondalık sayı.
balance = float(requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "getbalance"
}).text)
print(f"Balance: ${balance:.2f}")
Uç Noktaları Rapor Et
İyi Bildir (doğru çözüm)
GET https://ocr.captchaai.com/res.php?key=API_KEY&action=reportgood&id=TASK_ID
Yanıt: OK_REPORT_RECORDED
Kötü Bildir (yanlış çözüm)
GET https://ocr.captchaai.com/res.php?key=API_KEY&action=reportbad&id=TASK_ID
Yanıt: OK_REPORT_RECORDED
Kötü çözümlerin raporlanması, doğruluğu artırmaya yardımcı olur ve bakiyenize yansıtılabilir.
Yaygın Hata Kodları
| Hata Kodu | Anlamı | Eylem |
|---|---|---|
ERROR_WRONG_USER_KEY |
Geçersiz API anahtarı | Anahtarınızı doğrulayın |
ERROR_KEY_DOES_NOT_EXIST |
Anahtar kayıtlı değil | Kontrol panelini kontrol edin |
ERROR_ZERO_BALANCE |
Yetersiz fon | Bakiye ekle |
ERROR_NO_SLOT_AVAILABLE |
Sunucu kapasitesinde | 5 saniye sonra tekrar deneyin |
ERROR_CAPTCHA_UNSOLVABLE |
Mücadele çok zor | Yeni CAPTCHA ile tekrar deneyin |
ERROR_BAD_DUPLICATES |
Yinelenen görev reddedildi | Yeniden göndermeden önce bekleyin |
ERROR_WRONG_CAPTCHA_ID |
Geçersiz görev kimliği | Görev kimliği değerini kontrol edin |
ERROR_EMPTY_ACTION |
action parametresi eksik |
action=get'yi ekleyin |
IP_BANNED |
Çok fazla kötü istek | API anahtarınızı düzeltin; bekle |
Anketi Tamamlama Örneği
import requests
import time
API_KEY = "YOUR_API_KEY"
def solve_captcha(submit_params, timeout=300):
"""Generic solver with proper response handling."""
submit_params["key"] = API_KEY
# Submit
resp = requests.get("https://ocr.captchaai.com/in.php", params=submit_params)
if not resp.text.startswith("OK|"):
raise Exception(f"Submit error: {resp.text}")
task_id = resp.text.split("|")[1]
# Poll
deadline = time.time() + timeout
while time.time() < deadline:
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id
})
parsed = parse_result(result.text)
if parsed["status"] == "pending":
continue
elif parsed["status"] == "solved":
return parsed["result"]
else:
raise Exception(f"Solve error: {parsed['error']}")
raise TimeoutError(f"Task {task_id} timed out after {timeout}s")
SSS
Yanıt neden JSON yerine boru (|) sınırlayıcılarını kullanıyor?
CaptchaAI'nin formatı basitlik için optimize edilmiştir. Boruyla sınırlandırılmış yanıtlar JSON'a göre daha küçüktür ve ayrıştırılması daha hızlıdır. Yapılandırılmış veriler için (GeeTest sonuçları), OK|'den sonraki veriler anahtar/değer çiftlerini içerir.
Ağ hatalarını nasıl halledebilirim?
API çağrılarını try/except'ye sarın ve ConnectionError veya Timeout'de yeniden deneyin. Ağ sorunları API hatalarından ayrıdır; API'nin kendisi %99,9'un üzerinde çalışma süresi sağlar.
Maksimum jeton uzunluğu nedir?
reCAPTCHA belirteçleri en fazla ~500 karakter olabilir. Tokenin bölünmesini önlemek için her zaman split("|", 1) (maksimum 1 bölme) kullanın.