إرسال رمز reCAPTCHA باستخدام Python HTTPX

بقلم solvethreeمدة القراءة: 3 دقيقة

استخدم solution.token ووكيل الحل الناجح وهوية المتصفح المُعادة عند إرسال طلب POST إلى الموقع المستهدف. احتفظ بملفات تعريف ارتباط التطبيق في عميل HTTPX واحد؛ فالرمز الصالح لا يغني عن متطلبات الجلسة أو CSRF الخاصة بالتطبيق.

في هذه الصفحة

أرسل الرمز الجاهز عبر الوكيل الناجح

ثبّت HTTPX باستخدام pip install httpx. يستخدم المثال أيضًا حزمة SDK الرسمية لـ Python؛ راجع إعداد حزمة SDK لـ Python إذا لم تكن مثبّتة.

يتضمن المثال استدعاء الحل لتوضيح مصدر النتيجة. إذا كانت لديك بالفعل نتيجة SDK بحالة ready، فأعد استخدامها باسم result مع request الأصلي. لا تنشئ مهمة أخرى لمجرد إرسال رمزها.

  • اضبط SOLVETHREE_API_KEY على مفتاح API لمساحة عملك، وSOLVETHREE_PROXY على عنوان URL للوكيل. احتفظ بمفتاح API على الخادم.
  • استبدل accounts.example.com والإجراء login وعنوان URL للإرسال بقيم الموقع المقصود. يحتاج اسم المضيف إلى ملف تعريف موقع نشط في مساحة عملك؛ راجع إعداد ملف تعريف الموقع.
  • عدّل حقول النموذج لتطابق طلب التطبيق الفعلي. يرسل المثال حقل CAPTCHA فقط، وليس نموذج تسجيل دخول كاملًا.
HTTPX · إعادة استخدام الوكيل وهوية المتصفح المُعادة
# pip install httpx and the official solvethree SDK wheel.
import os
import httpx
from solvethree import Solvethree, successful_proxy

request = {"site": "accounts.example.com", "action": "login", "proxy": os.environ["SOLVETHREE_PROXY"]}
result = Solvethree(os.environ["SOLVETHREE_API_KEY"]).solve(request, timeout=180)
solution = result["solution"]
proxy = successful_proxy(request, result)
if proxy is None:
    raise RuntimeError("No valid successful proxy")
with httpx.Client(proxy=proxy, timeout=30, follow_redirects=False, trust_env=False) as target:
    # Use this client's cookie jar for any required application session first.
    response = target.post("https://accounts.example.com/login",
        data={"g-recaptcha-response": solution["token"]},
        headers={"User-Agent": solution["userAgent"], "sec-ch-ua": solution["secChUa"]})
    print("Application HTTP status:", response.status_code)
    # Check the application's actual response and required CSRF/session fields.

تختار successful_proxy(request, result) الوكيل الذي سيُعاد استخدامه للإرسال. أبقِ على الفحص الذي يوقف الإرسال إذا لم تُعد وكيلًا صالحًا. استخدم معامل HTTPX الحالي بصيغة المفرد proxy=، وليس proxies=. يمنع ضبط trust_env=False إعدادات الوكيل في البيئة من تغيير المسار المحدد صراحةً.

احتفظ بملفات تعريف الارتباط وهوية المتصفح وحقول النموذج معًا

إذا كان التطبيق يتطلب طلب صفحة أوليًا لإنشاء جلسة أو الحصول على قيمة CSRF، فأرسل هذا الطلب داخل عميل HTTPX نفسه قبل طلب POST. يحتفظ مخزن ملفات تعريف الارتباط فيه بالملفات بين الطلبات. ولن يمتلك عميل منفصل تلك الجلسة تلقائيًا.

استخدم userAgent وsecChUa المُعادين لهذه الطلبات التمهيدية أيضًا، وليس هوية متصفح غير مرتبطة. يمررهما المثال في طلب POST كترويستَي User-Agent وsec-ch-ua. حافظ على اتساق هاتين الترويستين والوكيل الناجح عند إرسال الحل إلى الموقع المقصود.

يرسل data= بيانات النموذج. هنا، يتلقى g-recaptcha-response قيمة solution.token؛ ويجب ألا يتلقى معرّف المهمة أو قاموس الحل كاملًا. طابق اسم الحقل مع طلب الموقع المستهدف الفعلي، وأدرج أي بيانات اعتماد وحقول مخفية وقيمة CSRF مطلوبة في الإرسال نفسه.

افحص عمليات إعادة التوجيه قبل اعتبار الإرسال ناجحًا

يُبقي follow_redirects=False استجابة التطبيق الأولى ظاهرة. إذا تضمنت إعادة توجيه، فافحص حالتها ووجهتها قبل متابعة الخطوة التالية المتوقعة للتطبيق صراحةً باستخدام العميل نفسه. لا تُعد إرسال الرمز تلقائيًا إلى عنوان URL مختلف.

حالة HTTP المطبوعة ليست سوى نقطة بداية. افحص متن الاستجابة أو وجهة إعادة التوجيه أو حالة التطبيق الناتجة لتحديد ما إذا كان الموقع المستهدف قد قبل الطلب. قد تمثل استجابة 200 أو إعادة التوجيه نجاحًا أو مسار خطأ؛ وتعني حالة ready في solvethree أنه تم توليد حل، لا أن الموقع المستهدف قد قبله.

شغّل مهمتك الأولى.

ابدأ برصيد قدره $5 في مساحة العمل.

إنشاء مساحة عمل
إرسال رمز reCAPTCHA باستخدام Python HTTPX · solvethree