اختبار CAPTCHA API باستخدام HTTPie
استخدم HTTPie لإنشاء مهمة واحدة، واحفظ معرّفها، ثم استرجع المهمة نفسها. سجّل requestId قبل POST حتى لا تضطرك مهلة الاتصال إلى إنشاء مهمة منطقية أخرى.
في هذه الصفحة
تحضير الطلب
- ثبّت HTTPie وjq، وشغّل المثال في Bash. تستخدم هذه الأوامر الملف التنفيذي
httpالخاص بـHTTPie، وليس curl أو اسمًا مستعارًا في الصدفة لـcurl. - عيّن متغير البيئة
SOLVETHREE_API_KEYإلى مفتاح API الخاص بمساحة عملك. شغّل هذا على جهاز موثوق؛ وأبقِ المفتاح خارج شيفرة المتصفح. - اضبط ملف تعريف نشطًا لاسم المضيف المستهدف في لوحة التحكم. إرسال اسم مضيف وإجراء لا ينشئ ملف تعريف. راجع إعداد ملف تعريف الموقع.
- استبدل اسم المضيف والإجراء وعنوان URL للوكيل في المثال. استخدم عنوان URL لوكيل HTTP أو HTTPS دون مسار أو استعلام أو جزء مرجعي.
- استبدل العنصر النائب requestId بمعرّف فريد لهذه المهمة المنطقية: من 1–64 حرفًا أو رقمًا أو شرطة سفلية أو شرطة من ASCII. احفظه قبل إرسال الطلب.
الطلب مخصّص لـreCAPTCHA Enterprise: القيمة الافتراضية لـrecaptchaType هي enterprise-v3. ويحتاج إلى site وaction وحقل واحد فقط من proxy أو proxyCandidates؛ يستخدم هذا المثال وكيلًا واحدًا. لا تضف حقول type أو url.
إنشاء المهمة وحفظ معرّفها
set -eu
umask 077
# Install HTTPie and jq. Keep the same request.json for recovery.
cat > request.json <<'JSON'
{
"site": "accounts.example.com",
"action": "login",
"proxy": "http://USER:PASSWORD@PROXY:PORT",
"requestId": "replace-with-one-unique-logical-task-id"
}
JSON
# This file contains proxy credentials; keep it private.
http --check-status --timeout=30 POST https://api.solvethree.com/v1/tasks \
Authorization:"Bearer $SOLVETHREE_API_KEY" waitMs==0 < request.json > task.json
TASK_ID=$(jq -r '.id' task.json)
http --check-status --timeout=30 GET "https://api.solvethree.com/v1/tasks/$TASK_ID" \
Authorization:"Bearer $SOLVETHREE_API_KEY" waitMs==15000
# pending/solving: retrieve the same ID again, within a finite deadline.
# ready: use solution. failed: stop and inspect errorCode/error.
# A timed-out POST is recovered with the unchanged file and requestId.توضع سلاسل JSON المحاطة بعلامات اقتباس في request.json، الذي يقرأه HTTPie من الإدخال القياسي. ترسل ترويسة Authorization مفتاحك باستخدام مصادقة Bearer. أبقِ request.json خاصًا لأنه يحتوي على بيانات اعتماد الوكيل.
يُعدّ waitMs==0 وwaitMs==15000 معاملَي استعلام في HTTPie، وليسَا حقلين في جسم JSON. يطلب POST عدم الانتظار؛ ويستخدم GET انتظارًا قدره 15,000 مللي ثانية. ويضبط الخيار المنفصل --timeout=30 في HTTPie مهلة العميل على 30 ثانية.
تُحفظ استجابة POST في task.json، ويستخرج jq منها id لاستخدامه في GET. شغّل الأوامر بالترتيب. يوقف set -eu البرنامج النصي إذا أبلغ HTTPie عن فشل، قبل استخدام استجابة غير مكتملة للاسترجاع.
نجاح HTTP لا يعني جاهزية المهمة
يرصد --check-status استجابات HTTP غير الناجحة. عالجها قبل اعتبار الجسم استجابة مهمة ناجحة. قد يُعيد طلب HTTP ناجح مهمة غير مكتملة أو فاشلة؛ لذا اقرأ status في JSON بعد ذلك.
| الحالة | الإجراء التالي |
|---|---|
| قيد الانتظار أو جارٍ الحل | استرجع معرّف المهمة نفسه مجددًا، ضمن مهلة نهائية محدودة تختارها. لا تنشئ مهمة أخرى لمجرد أن هذه المهمة ليست جاهزة. |
| ready | استخدم الحل المُعاد. هذه هي الحالة الوحيدة التي تتضمن حلًا قابلًا للاستخدام. |
| فاشلة | توقف عن الاستطلاع وافحص errorCode وerror. تُردّ رسوم عمليات الحل الفاشلة؛ ولا تُعِد المحاولة عشوائيًا بمدخلات غير صالحة لم تتغير. |
ينفّذ المثال عملية استرجاع واحدة، لا حلقة استطلاع. عند إرسال حل جاهز إلى هدفه المقصود، استخدم userAgent وsecChUa المُعادين مع الوكيل الذي نجح. تعني الجاهزية أن solvethree أنشأ حلًا، لا أن طلب تطبيقك نجح.
استرداد طلب POST انتهت مهلته
انتهاء مهلة العميل لا يثبت فشل إنشاء المهمة. إذا كان لديك معرّف المهمة بالفعل، فاسترجعها. إذا انتهت مهلة POST قبل استلام معرّف، فأعِد تشغيل POST باستخدام request.json دون تغيير، بما في ذلك requestId الأصلي. يُعيد المعرّف نفسه ومدخلات المهمة نفسها المهمة الموجودة.
لا تستخرج معرّفًا من task.json فارغ أو غير مكتمل؛ استردّ POST أولًا. لا تغيّر الوكيل أو الإجراء أو مدخلات المهمة الأخرى عند إعادة استخدام requestId نفسه، فالمدخلات المختلفة تُحدث تعارضًا. استخدم requestId جديدًا فقط عندما تنوي إنشاء مهمة منطقية جديدة.
المصادر ومرجع API
شغّل مهمتك الأولى.
ابدأ برصيد قدره $5 في مساحة العمل.