Sorun Giderme

CaptchaAI Eşzamanlı İstek Sınırları: Teşhis ve Düzeltmeler

Çok fazla paralel CAPTCHA görevi çalıştırdığınızda CaptchaAI, ERROR_NO_SLOT_AVAILABLE değerini döndürür. Bu, hesabınızın eş zamanlı görev sınırını aştığınız anlamına gelir. Bu kılavuzda sınırlar, bunların nasıl ele alınacağı ve sınıra ulaşmadan verimi nasıl en üst düzeye çıkarabileceğiniz açıklanmaktadır.


Belirtiler

Ne görüyorsun Sebep
ERROR_NO_SLOT_AVAILABLE Aynı anda çok fazla aktif görev
HTTP 429 yanıtları API uç noktasına saniyede çok fazla istek gönderiliyor
Bazı görevler başarılı olur, diğerleri başarısız olur Sınıra aralıklı olarak ulaşıyorum
Çözme süreleri artar Hesabınızda kuyruk tıkanıklığı

Sınırları anlamak

CaptchaAI'nin iki tür oran sınırı vardır:

Sınır türü Neyi kontrol ediyor Hata
Eşzamanlı görevler Aynı anda çözülen maksimum görev sayısı ERROR_NO_SLOT_AVAILABLE
Talep oranı /poll uç noktalarını göndermek için saniyede maksimum API çağrısı HTTP429

Eşzamanlı görev sınırınız planınıza bağlıdır. Kontrol panelinizi şu adresten kontrol edin:captchaai.commevcut limitiniz için.


Düzeltme 1: Eşzamanlılığı sınırlamak için bir semafor ekleyin

Kaç görevin paralel olarak çalıştığını kontrol edin:

import requests
import time
import threading

API_KEY = "YOUR_API_KEY"
MAX_CONCURRENT = 20  # Stay below your account limit

semaphore = threading.Semaphore(MAX_CONCURRENT)


def solve_captcha(params):
    """Solve a CAPTCHA with concurrency control."""
    with semaphore:
        params["key"] = API_KEY
        params["json"] = 1

        submit = requests.post("https://ocr.captchaai.com/in.php", data=params).json()
        if submit.get("status") != 1:
            raise RuntimeError(f"Submit: {submit.get('request')}")

        task_id = submit["request"]
        time.sleep(10)

        for _ in range(30):
            result = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": API_KEY, "action": "get", "id": task_id, "json": 1
            }).json()
            if result.get("status") == 1:
                return result["request"]
            if result.get("request") != "CAPCHA_NOT_READY":
                raise RuntimeError(f"Solve: {result['request']}")
            time.sleep(5)
        raise TimeoutError("Timed out")

Düzeltme 2: ERROR_NO_SLOT_AVAILABLE üzerinde yeniden deneyin

Sınıra ulaştığınızda hemen başarısız olmak yerine bekleyin ve yeniden deneyin:

def submit_with_retry(params, max_retries=5):
    """Submit with automatic retry for slot errors."""
    params["key"] = API_KEY
    params["json"] = 1

    for attempt in range(max_retries):
        resp = requests.post("https://ocr.captchaai.com/in.php", data=params).json()

        if resp.get("status") == 1:
            return resp["request"]

        error = resp.get("request", "")
        if error == "ERROR_NO_SLOT_AVAILABLE":
            wait = 2 ** attempt  # Exponential backoff: 1, 2, 4, 8, 16 seconds
            print(f"No slot available, retrying in {wait}s (attempt {attempt + 1})")
            time.sleep(wait)
            continue
        else:
            raise RuntimeError(f"Submit error: {error}")

    raise RuntimeError("Max retries exceeded — no slots available")

Çözüm 3: Görev kuyruğunu kullanma

API'yi doldurmak yerine görevleri sıraya koyun ve bunları kontrollü bir hızda işleyin:

from queue import Queue
from threading import Thread

task_queue = Queue()
results = {}


def worker():
    while True:
        task_id_local, params = task_queue.get()
        try:
            token = solve_captcha(params)
            results[task_id_local] = {"status": "ok", "token": token}
        except Exception as e:
            results[task_id_local] = {"status": "error", "message": str(e)}
        finally:
            task_queue.task_done()


# Start worker threads (limited by semaphore)
for _ in range(MAX_CONCURRENT):
    t = Thread(target=worker, daemon=True)
    t.start()

# Add tasks to queue
captcha_tasks = [
    {"method": "userrecaptcha", "googlekey": "KEY1", "pageurl": "https://site1.com"},
    {"method": "userrecaptcha", "googlekey": "KEY2", "pageurl": "https://site2.com"},
    # ... more tasks
]

for i, params in enumerate(captcha_tasks):
    task_queue.put((i, params))

task_queue.join()
print(f"Completed: {len(results)} tasks")

Düzeltme 4: Yoklama sıklığını azaltın

Çok sık yapılan yoklama, API çağrılarının boşa harcanmasına neden olur ve oran sınırlarını tetikleyebilir:

# WRONG — polling every 1 second
time.sleep(1)

# CORRECT — poll every 5 seconds
time.sleep(5)

# BETTER — wait longer on initial delay, then poll
time.sleep(15)  # Initial wait
for _ in range(20):
    # ... poll
    time.sleep(5)

Aktif görevleri izleme

Şu anda kaç görevin etkin olduğunu takip edin:

active_count = 0
lock = threading.Lock()

def track_solve(params):
    global active_count
    with lock:
        active_count += 1
        print(f"Active tasks: {active_count}/{MAX_CONCURRENT}")
    try:
        return solve_captcha(params)
    finally:
        with lock:
            active_count -= 1

SSS

Varsayılan eşzamanlı görev sınırı nedir?

Bu, hesap planınıza bağlıdır. Mevcut limitiniz için CaptchaAI kontrol panelinizi kontrol edin. Planınızı yükselterek bunu artırabilirsiniz.

Oylama oran sınırına dahil mi?

Evet. Her res.php isteği önemlidir. Her 1 saniyede bir değil, her 5 saniyede bir anket yapın.

Eşzamanlı limitimi artırabilir miyim?

Evet. Maksimum eşzamanlı görev sayısını artırmak için CaptchaAI desteğine başvurun veya planınızı yükseltin.

ERROR_NO_SLOT_AVAILABLE ile HTTP 429 arasındaki fark nedir?

ERROR_NO_SLOT_AVAILABLE çok fazla görevin çözülmesi anlamına gelir. HTTP 429, saniyede çok fazla API isteğinin olduğu anlamına gelir (yalnızca yoklama bile). Her ikisi de geri çekilmeyi gerektirir.


Çözümünüzü CaptchaAI'de ölçeklendirin

Verimi en üst düzeye çıkarıncaptchaai.com.


İlgili kılavuzlar

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