البدء السريع

رد الاتصال أم الاستطلاع الدوري في CaptchaAI؟

يوفّر CaptchaAI طريقتين لاستلام نتائج CAPTCHA بعد الحل: الاستطلاع الدوري، حيث تسأل عن النتيجة على فترات ثابتة، ورد الاتصال، حيث يرسل لك CaptchaAI النتيجة عندما تصبح جاهزة. كلا الأسلوبين صحيح؛ الفارق الحقيقي هو شكل التطبيق الذي تبنيه.

الاستطلاع الدوري (الافتراضي)

قم باستقصاء نقطة النهاية res.php كل 5 ثوانٍ حتى تصبح النتيجة جاهزة:

import requests
import time

API_KEY = "YOUR_API_KEY"

# Submit
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com"
})
task_id = resp.text.split("|")[1]

# Poll
while True:
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id
    })
    if result.text == "CAPCHA_NOT_READY":
        continue
    if result.text.startswith("OK|"):
        token = result.text.split("|")[1]
        break

إيجابيات الاستطلاع الدوري

  • سهل التنفيذ
  • لا حاجة للبنية التحتية للخادم
  • يعمل في أي بيئة تقريبًا: سكربتات محلية، CLI، أو بيئات serverless
  • لا يتطلب فتح endpoint عام أو استقبال طلبات خارجية

سلبيات الاستطلاع الدوري

  • يولّد طلبات إضافية أثناء الانتظار لا تضيف قيمة حقيقية
  • يزيد زمن الاستلام لأنك لا تعرف أن النتيجة جاهزة إلا عند الاستطلاع التالي
  • يرفع عدد استدعاءات API

رد الاتصال (خطاف الويب)

قم بتوفير عنوان URL pingback عند الإرسال. يقوم CaptchaAI بنشر النتيجة على عنوان URL الخاص بك عند اكتمال الحل:

# Submit with callback URL
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com",
    "pingback": "https://your-server.com/captcha-callback"
})
task_id = resp.text.split("|")[1]
# No polling needed — result arrives at your callback URL

يرسل CaptchaAI طلب GET إلى عنوان URL لرد الاتصال الخاص بك:

GET https://your-server.com/captcha-callback?id=TASK_ID&code=TOKEN

خادم رد الاتصال (Python Flask)

from flask import Flask, request

app = Flask(__name__)
results = {}

@app.route("/captcha-callback")
def callback():
    task_id = request.args.get("id")
    token = request.args.get("code")
    results[task_id] = token
    return "OK", 200

@app.route("/get-result/<task_id>")
def get_result(task_id):
    token = results.get(task_id)
    if token:
        return {"status": "solved", "token": token}
    return {"status": "pending"}, 202

if __name__ == "__main__":
    app.run(port=8080)

خادم رد الاتصال (Node.js Express)

const express = require("express");
const app = express();

const results = new Map();

app.get("/captcha-callback", (req, res) => {
  const { id, code } = req.query;
  results.set(id, code);
  res.send("OK");
});

app.get("/get-result/:taskId", (req, res) => {
  const token = results.get(req.params.taskId);
  if (token) {
    res.json({ status: "solved", token });
  } else {
    res.status(202).json({ status: "pending" });
  }
});

app.listen(8080);

إيجابيات رد الاتصال

  • إشعار فوري عند اكتمال الحل
  • لا توجد طلبات استطلاع مهدرة
  • أكثر كفاءة للاستخدام بكميات كبيرة
  • أفضل للبنيات غير المتزامنة

سلبيات رد الاتصال

  • يتطلب خادمًا أو endpoint عامًا يمكن الوصول إليه
  • تحتاج إلى التعامل مع موثوقية webhook مثل إعادة المحاولة والمهلات
  • بنية تحتية أكثر تعقيدًا
  • يتطلب ضبط الشبكة والجدار الناري

مقارنة

عامل الاستطلاع الدوري رد الاتصال
البنية التحتية المطلوبة لا شيء خادم ويب مع عنوان URL عام
تعقيد التنفيذ بسيط متوسط
الكمون بعد الحل 0-5 ثواني شبه فوري
استدعاءات API لكل حل ~3-12 (طلبات الاستطلاع الدوري) 1 (إرسال فقط)
الأفضل له سكربتات ومشاريع صغيرة تطبيقات خادمية أعلى حجمًا
يعمل خلف جدار الحماية ❌ (يحتاج إلى عنوان URL عام)
يعمل في البيئات عديمة الخوادم ⚠️ (يتطلب endpoint webhook)

متى تختار كل أسلوب

استخدم الاستطلاع الدوري عندما:

  • تشغّل سكربتات محلية أو أدوات CLI
  • تبني نموذجًا أوليًا أو تنفّذ اختبارًا سريعًا
  • تعمل داخل شبكة مغلقة بلا endpoint عام
  • تعالج أقل من 100 مهمة CAPTCHA في الساعة
  • تستخدم وظائف serverless مثل Lambda أو Cloud Functions

استخدم رد الاتصال عندما:

  • معالجة أكثر من 100 اختبار CAPTCHA في الساعة
  • تشغّل تطبيق ويب لديه خادم متاح بالفعل
  • تبني نظامًا غير متزامن أو شبه لحظي
  • تريد تقليل عدد استدعاءات API
  • لديك مخزن حالة أو queue يمكنه استقبال النتيجة

نهج هجين

استخدم رد الاتصال مع احتياطي الاستطلاع الدوري:

import requests
import time

API_KEY = "YOUR_API_KEY"
CALLBACK_URL = "https://your-server.com/captcha-callback"

def solve_with_fallback(site_key, page_url):
    # Try callback first
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY,
        "method": "userrecaptcha",
        "googlekey": site_key,
        "pageurl": page_url,
        "pingback": CALLBACK_URL
    })
    task_id = resp.text.split("|")[1]

    # Wait for callback result (check your callback store)
    for _ in range(12):  # 60 seconds
        time.sleep(5)
        result = check_callback_store(task_id)
        if result:
            return result

    # Fallback to polling
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id
    })
    if result.text.startswith("OK|"):
        return result.text.split("|")[1]

    raise TimeoutError()

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

هل يحتاج عنوان URL لرد الاتصال إلى HTTPS؟

يوصى باستخدام HTTPS للأمان، ولكن HTTP يعمل أيضًا. إذا كان رد الاتصال الخاص بك يتعامل مع بيانات حساسة (رموز مميزة)، فاستخدم HTTPS.

ماذا لو كان خادم رد الاتصال الخاص بي معطلاً عند وصول النتيجة؟

قد يقوم CaptchaAI بإعادة محاولة رد الاتصال. كشبكة أمان، يمكنك دائمًا الرجوع إلى استطلاع نقطة النهاية للنتيجة.

هل يمكنني استخدام نفس عنوان URL لرد الاتصال لمهام متعددة؟

نعم. يتضمن كل رد اتصال معلمة id حتى تتمكن من مطابقة النتائج مع مهامهم.

أدلة ذات صلة

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