استكشاف الأخطاء

حدود الطلب المتزامن CaptchaAI: التشخيص والإصلاحات

عند تشغيل عدد كبير جدًا من مهام CAPTCHA المتوازية، تقوم CaptchaAI بإرجاع ERROR_NO_SLOT_AVAILABLE. وهذا يعني أنك تجاوزت حد المهام المتزامنة في حسابك. يشرح هذا الدليل الحدود وكيفية التعامل معها وكيفية زيادة الإنتاجية دون الوصول إلى الحد الأقصى.


الأعراض

ما تراه السبب
ERROR_NO_SLOT_AVAILABLE هناك عدد كبير جدًا من المهام النشطة في وقت واحد
استجابات HTTP 429 هناك عدد كبير جدًا من الطلبات في الثانية لنقطة نهاية واجهة برمجة التطبيقات
تنجح بعض المهام، وتفشل أخرى ضرب الحد بشكل متقطع
حل مرات الزيادة ازدحام قائمة الانتظار على حسابك

فهم الحدود

يحتوي CaptchaAI على نوعين من حدود الأسعار:

نوع الحد ما تسيطر عليه خطأ
المهام المتزامنة الحد الأقصى لعدد المهام التي يتم حلها في وقت واحد ERROR_NO_SLOT_AVAILABLE
** معدل الطلب ** الحد الأقصى لمكالمات API في الثانية لإرسال نقاط النهاية/poll HTTP 429

يعتمد حد المهام المتزامنة على خطتك. تحقق من لوحة التحكم الخاصة بك علىcaptchaai.comللحد الحالي الخاص بك.


الإصلاح 1: إضافة إشارة للحد من التزامن

التحكم في عدد المهام التي تعمل بالتوازي:

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")

الإصلاح 2: أعد المحاولة على ERROR_NO_SLOT_AVAILABLE

عندما تصل إلى الحد الأقصى، انتظر وأعد المحاولة بدلاً من الفشل على الفور:

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")

الإصلاح 3: استخدام قائمة انتظار المهام

بدلاً من إغراق واجهة برمجة التطبيقات (API)، قم بوضع المهام في قائمة الانتظار ومعالجتها بمعدل متحكم فيه:

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")

الإصلاح 4: تقليل تكرار الاقتراع

يؤدي الاستقصاء في كثير من الأحيان إلى إهدار استدعاءات واجهة برمجة التطبيقات (API) ويمكن أن يؤدي إلى فرض حدود على المعدل:

# 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)

مراقبة المهام النشطة

تتبع عدد المهام النشطة حاليًا:

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

الأسئلة الشائعة

ما هو الحد الافتراضي للمهمة المتزامنة؟

ذلك يعتمد على خطة حسابك. تحقق من لوحة معلومات CaptchaAI الخاصة بك لمعرفة الحد الحالي. يمكنك زيادتها عن طريق ترقية خطتك.

هل يتم احتساب الاقتراع ضد الحد الأقصى للمعدل؟

نعم. كل طلب res.php مهم. قم بالتصويت كل 5 ثواني، وليس كل ثانية واحدة.

هل يمكنني زيادة الحد المتزامن الخاص بي؟

نعم. اتصل بدعم CaptchaAI أو قم بترقية خطتك لزيادة الحد الأقصى لعدد المهام المتزامنة.

ما الفرق بين ERROR_NO_SLOT_AVAILABLE وHTTP 429؟

ERROR_NO_SLOT_AVAILABLE يعني أن هناك الكثير من المهام التي يتم حلها. يعني HTTP 429 عددًا كبيرًا جدًا من طلبات API في الثانية (حتى مجرد الاستقصاء). وكلاهما يتطلب التراجع.


قم بتوسيع نطاق الحل الخاص بك في CaptchaAI

تعظيم الإنتاجية فيcaptchaai.com.


أدلة ذات صلة

التعليقات غير مفعّلة لهذا المقال.