בדיקת ה-API של CAPTCHA באמצעות HTTPie

מאת solvethree3 דקות קריאה

השתמשו ב-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.

יצירת המשימה ושמירת המזהה שלה

HTTPie · יצירת משימה אחת ואחזורה
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 קורא מ-stdin. כותרת 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.

מה לעשות בהתאם לסטטוס המשימה
מה לעשות בהתאם לסטטוס המשימה
מצבהפעולה הבאה
pending או solvingאחזרו שוב את אותו מזהה משימה, במסגרת מגבלת זמן סופית שתבחרו. אל תיצרו משימה נוספת רק מפני שזו עדיין לא מוכנה.
מוכןהשתמשו בפתרון שהוחזר. זהו הסטטוס היחיד שבו יש פתרון שניתן להשתמש בו.
failedהפסיקו לתשאל ובדקו את errorCode ואת error. ניתן החזר על פתרונות שנכשלו; אל תנסו שוב באופן עיוור עם אותו קלט לא תקין.

הדוגמה מבצעת אחזור אחד, ולא לולאת תשאול. כשאתם שולחים פתרון מוכן ליעד המיועד שלו, השתמשו ב-userAgent וב-secChUa שהוחזרו עם הפרוקסי שהצליח. מצב מוכן מציין ש-solvethree יצר פתרון — לא שבקשת האפליקציה שלכם הצליחה.

שחזור POST שחרג מהזמן הקצוב

חריגה מהזמן הקצוב בצד הלקוח לא מוכיחה שיצירת המשימה נכשלה. אם כבר יש לכם מזהה משימה, אחזרו אותה. אם ה-POST חרג מהזמן הקצוב לפני שקיבלתם מזהה, הריצו שוב את ה-POST עם request.json ללא שינוי, כולל requestId המקורי שלו. אותו מזהה ואותם נתוני קלט למשימה מחזירים את המשימה הקיימת.

אל תחלצו מזהה מתוך task.json ריק או חלקי; שחזרו קודם את ה-POST. אל תשנו את הפרוקסי, הפעולה או נתוני קלט אחרים למשימה תוך שימוש חוזר באותו requestId — נתוני קלט שונים גורמים להתנגשות. השתמשו ב-requestId חדש רק כשבכוונתכם ליצור משימה לוגית חדשה.

הפעלת המשימה הראשונה שלך.

התחילו עם $5 בקרדיט לסביבת העבודה.

יצירת סביבת עבודה
בדיקת ה-API של CAPTCHA באמצעות HTTPie · solvethree