DevOps & Scaling

حل CAPTCHA بدون خوادم باستخدام AWS Lambda وCaptchaAI

تتعامل AWS Lambda مع حل اختبار CAPTCHA دون إدارة الخوادم. ادفع فقط عند الحل، وقم بالتوسع تلقائيًا، والتكامل مع بوابة API، أو SQS، أو وظائف الخطوة.


معالج لامدا

# lambda_function.py
import json
import os
import time
import urllib.request
import urllib.parse


def lambda_handler(event, context):
    """AWS Lambda handler for CaptchaAI solving."""
    api_key = os.environ["CAPTCHAAI_KEY"]

    # Parse input
    body = json.loads(event.get("body", "{}")) if isinstance(event.get("body"), str) else event

    method = body.get("method", "userrecaptcha")
    params = body.get("params", {})

    try:
        token = solve_captcha(api_key, method, params)
        return {
            "statusCode": 200,
            "body": json.dumps({"token": token}),
        }
    except Exception as e:
        return {
            "statusCode": 500,
            "body": json.dumps({"error": str(e)}),
        }


def solve_captcha(api_key, method, params, timeout=90):
    """Solve CAPTCHA using CaptchaAI API."""
    # Submit task
    submit_data = urllib.parse.urlencode({
        "key": api_key,
        "method": method,
        "json": 1,
        **params,
    }).encode()

    req = urllib.request.Request(
        "https://ocr.captchaai.com/in.php",
        data=submit_data,
    )
    with urllib.request.urlopen(req, timeout=30) as resp:
        result = json.loads(resp.read())

    if result.get("status") != 1:
        raise RuntimeError(f"Submit error: {result.get('request')}")

    task_id = result["request"]

    # Poll for result
    start = time.time()
    while time.time() - start < timeout:
        time.sleep(5)
        poll_url = (
            f"https://ocr.captchaai.com/res.php"
            f"?key={api_key}&action=get&id={task_id}&json=1"
        )
        with urllib.request.urlopen(poll_url, timeout=15) as resp:
            data = json.loads(resp.read())

        if data["request"] != "CAPCHA_NOT_READY":
            if data.get("status") == 1:
                return data["request"]
            raise RuntimeError(f"Solve error: {data['request']}")

    raise TimeoutError("Solve timeout")

تأمين مفتاح API مع مدير الأسرار

import json
import boto3


def get_api_key():
    """Retrieve CaptchaAI key from AWS Secrets Manager."""
    client = boto3.client("secretsmanager")
    response = client.get_secret_value(SecretId="captchaai/api-key")
    secret = json.loads(response["SecretString"])
    return secret["api_key"]

تخزين السر:

aws secretsmanager create-secret \
  --name captchaai/api-key \
  --secret-string '{"api_key":"YOUR_API_KEY"}'

قالب SAM (البنية التحتية كرمز)

# template.yaml
AWSTemplateFormatVersion: "2010-09-09"
Transform: AWS::Serverless-2016-10-31

Globals:
  Function:
    Timeout: 120
    MemorySize: 256
    Runtime: python3.11

Resources:
  CaptchaSolverFunction:
    Type: AWS::Serverless::Function
    Properties:
      Handler: lambda_function.lambda_handler
      Environment:
        Variables:
          CAPTCHAAI_KEY: !Sub "{{resolve:secretsmanager:captchaai/api-key:SecretString:api_key}}"
      Events:
        SolveApi:
          Type: Api
          Properties:
            Path: /solve
            Method: post
      Policies:

        - AWSSecretsManagerGetSecretValuePolicy:
            SecretArn: !Sub "arn:aws:secretsmanager:${AWS::Region}:${AWS::AccountId}:secret:captchaai/api-key-*"

Outputs:
  SolveApiUrl:
    Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/solve"

نشر

# Build and deploy
sam build
sam deploy --guided

# Test
curl -X POST https://YOUR_API_ID.execute-api.us-east-1.amazonaws.com/Prod/solve \
  -H "Content-Type: application/json" \
  -d '{
    "method": "userrecaptcha",
    "params": {
      "googlekey": "SITE_KEY",
      "pageurl": "https://example.com"
    }
  }'

معالجة الدفعات التي يتم تشغيلها بواسطة SQS

معالجة مهام CAPTCHA من قائمة انتظار SQS:

import json
import os
import time
import urllib.request
import urllib.parse


def sqs_handler(event, context):
    """Process CAPTCHA tasks from SQS queue."""
    api_key = os.environ["CAPTCHAAI_KEY"]
    results = []

    for record in event["Records"]:
        task = json.loads(record["body"])
        try:
            token = solve_captcha(
                api_key,
                task["method"],
                task["params"],
            )
            results.append({
                "task_id": task.get("id"),
                "status": "success",
                "token": token[:50],
            })
        except Exception as e:
            results.append({
                "task_id": task.get("id"),
                "status": "error",
                "error": str(e),
            })

    return {"results": results}

اعتبارات لامدا

عامل القيمة
الحد الأقصى للمهلة 15 دقيقة (تم ضبطها على دقيقتين لمعظم اختبارات CAPTCHA)
الذاكرة 256 ميجابايت كافية (بدون معالجة ثقيلة)
التزامن الافتراضي 1000 متزامن (اطلب الزيادة إذا لزم الأمر)
بداية باردة ~500 مللي ثانية لPython (وقت لا يُذكر مقابل وقت الحل)
التكلفة ~0.0001 USD لكل حل (حساب فقط)
التبعيات استخدم urllib (مدمج) لتجنب طبقات Lambda

استكشاف الأخطاء وإصلاحها

المشكلة السبب الإجراء
انتهت مهلة الوظيفة مهلة لامدا < حل الوقت اضبط المهلة على 120 ثانية+
تم رفض الإذن على السرية سياسة إدارة الهوية وإمكانية الوصول (IAM) مفقودة أضف سياسة قراءة SecretsManager
البداية الباردة تضيف الكمون دعوات نادرة استخدم التزامن المقدم
خطأ في الاستيراد للطلبات غير المجمعة في لامدا استخدم urllib.request (مدمج) أو أضف طبقة

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

هل Lambda فعالة من حيث التكلفة لحل اختبار CAPTCHA؟

نعم. بسعر 0.0001 دولار تقريبًا لكل استدعاء (256 ميجابايت، 60 ثانية)، تضيف Lambda تكلفة ضئيلة بالإضافة إلى رسوم CaptchaAI API. يمكنك تجنب تكاليف الخادم أثناء وقت الخمول.

ماذا عن مهلة Lambda البالغة 15 دقيقة؟

يتم حل معظم اختبارات CAPTCHA خلال 10 إلى 60 ثانية. اضبط مهلة Lambda على 120 ثانية. بالنسبة للأنواع المعقدة مثل reCAPTCHA Enterprise، استخدم 180 ثانية.

هل يمكنني استخدام طبقات Lambda لمكتبة الطلبات؟

نعم، ولكن urllib.request (المدمج) يعمل بشكل جيد مع واجهة برمجة تطبيقات HTTP البسيطة الخاصة بـ CaptchaAI. وهذا يتجنب إدارة الطبقة بالكامل.


أدلة ذات صلة


الذهاب بدون خادم — احصل على مفتاح CaptchaAI الخاص بك اليوم.

النقاشات (0)

لا توجد تعليقات بعد.

مقالات ذات صلة

DevOps & Scaling معالجة نتائج CAPTCHA بنمط حدثي باستخدام AWS SNS وCaptchaAI
دليل تشغيلي لـ معالجة نتائج CAPTCHA بنمط حدثي باستخدام AWS SNS وCaptcha AI يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Captcha A...

دليل تشغيلي لـ معالجة نتائج CAPTCHA بنمط حدثي باستخدام AWS SNS وCaptcha AI يغطّي قرارات البنية، والاعتمادية، و...

Apr 20, 2026
DevOps & Scaling نشر عمّال CaptchaAI باستخدام Ansible
دليل تشغيلي لـ نشر عمّال Captcha AI باستخدام Ansible يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Captcha AI في بيئات الإنتاج.

دليل تشغيلي لـ نشر عمّال Captcha AI باستخدام Ansible يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتم...

Apr 17, 2026
DevOps & Scaling النشر باللونين الأزرق والأخضر للبنية الأساسية لحل اختبار CAPTCHA
دليل تشغيلي لـ النشر باللونين الأزرق والأخضر للبنية الأساسية لحل اختبار CAPTCHA يغطّي قرارات البنية، والاعتمادية، والمراقبة، وأنماط الأتمتة المناسبة لتشغيل Capt...

دليل تشغيلي لـ النشر باللونين الأزرق والأخضر للبنية الأساسية لحل اختبار CAPTCHA يغطّي قرارات البنية، والاعتماد...

Apr 25, 2026