Başlangıç

CaptchaAI API Yanıt Formatlarının Açıklaması

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.

İlgili Kılavuzlar

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