HTTPie से CAPTCHA API का परीक्षण करें
HTTPie से एक टास्क बनाएँ, उसकी ID सहेजें, फिर उसी टास्क को प्राप्त करें। POST से पहले requestId दर्ज कर लें, ताकि कनेक्शन टाइमआउट होने पर आपको नया तार्किक टास्क न बनाना पड़े।
इस पेज पर
अनुरोध तैयार करें
- HTTPie और jq इंस्टॉल करें और उदाहरण Bash में चलाएँ। ये कमांड HTTPie के
httpएक्ज़ीक्यूटेबल का इस्तेमाल करते हैं, curl या curl के किसी शेल एलियस का नहीं। - एनवायरनमेंट वेरिएबल
SOLVETHREE_API_KEYको अपनी वर्कस्पेस API कुंजी पर सेट करें। इसे किसी भरोसेमंद मशीन पर चलाएँ; कुंजी को ब्राउज़र कोड में न रखें। - कंसोल में अपने लक्ष्य होस्टनाम के लिए सक्रिय प्रोफ़ाइल कॉन्फ़िगर करें। होस्टनाम और ऐक्शन भेजने से प्रोफ़ाइल नहीं बनती। साइट प्रोफ़ाइल सेटअप देखें।
- उदाहरण के होस्टनाम, ऐक्शन और प्रॉक्सी URL को बदलें। ऐसा HTTP या HTTPS प्रॉक्सी URL इस्तेमाल करें जिसमें पाथ, क्वेरी या फ़्रैगमेंट न हो।
- requestId प्लेसहोल्डर को इस तार्किक टास्क की अनूठी ID से बदलें: 1–64 ASCII अक्षर, अंक, अंडरस्कोर या हाइफ़न। अनुरोध भेजने से पहले इसे सहेजें।
यह अनुरोध reCAPTCHA Enterprise के लिए है: recaptchaType का डिफ़ॉल्ट मान enterprise-v3 है। इसके लिए site, action और proxy या proxyCandidates में से ठीक एक चाहिए; यह उदाहरण एक प्रॉक्सी इस्तेमाल करता है। type या url फ़ील्ड न जोड़ें।
टास्क बनाएँ और उसकी ID सहेजें
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 ms की प्रतीक्षा इस्तेमाल करता है। HTTPie का अलग --timeout=30 क्लाइंट टाइमआउट को 30 सेकंड पर सेट करता है।
POST रिस्पॉन्स task.json में सहेजा जाता है, और jq GET के लिए उसमें से id निकालता है। कमांड क्रम से चलाएँ। अगर HTTPie विफलता रिपोर्ट करता है, तो set -eu स्क्रिप्ट रोक देता है, ताकि प्राप्त करने के लिए अधूरा रिस्पॉन्स इस्तेमाल न हो।
HTTP सफलता का मतलब टास्क तैयार होना नहीं है
--check-status असफल HTTP रिस्पॉन्स पकड़ता है। बॉडी को सफल टास्क रिस्पॉन्स मानने से पहले उन्हें संभालें। सफल HTTP अनुरोध भी अधूरा या विफल टास्क लौटा सकता है; इसके बाद JSON की status पढ़ें।
| स्थिति | अगली कार्रवाई |
|---|---|
| pending या solving | अपनी तय की गई सीमित समय-सीमा के भीतर उसी टास्क ID को फिर से प्राप्त करें। केवल इस टास्क के तैयार न होने के कारण दूसरा टास्क न बनाएँ। |
| तैयार | लौटाए गए समाधान का इस्तेमाल करें। केवल इसी स्थिति में इस्तेमाल करने योग्य समाधान होता है। |
| failed | पोलिंग रोकें और errorCode तथा error जाँचें। विफल समाधान प्रयासों का शुल्क वापस मिलता है; बिना सोचे-समझे अमान्य इनपुट को बिना बदले दोबारा न भेजें। |
यह उदाहरण एक बार प्राप्त करता है, पोलिंग लूप नहीं चलाता। जब आप तैयार समाधान को उसके निर्धारित लक्ष्य पर सबमिट करें, तो सफल प्रॉक्सी के साथ लौटाए गए userAgent और secChUa इस्तेमाल करें। तैयार होने का मतलब है कि solvethree ने समाधान बना दिया है—यह नहीं कि आपका ऐप्लिकेशन अनुरोध सफल हुआ।
टाइमआउट हुए POST को रिकवर करें
क्लाइंट टाइमआउट से यह साबित नहीं होता कि टास्क बनाना विफल हुआ। अगर आपके पास पहले से टास्क ID है, तो उसे प्राप्त करें। अगर ID मिलने से पहले POST टाइमआउट हो गया, तो बिना बदली हुई request.json, जिसमें उसका मूल requestId शामिल हो, के साथ POST फिर से चलाएँ। वही ID और टास्क इनपुट मौजूदा टास्क लौटाते हैं।
खाली या अधूरी task.json से ID न निकालें; पहले POST को रिकवर करें। उसी requestId का दोबारा इस्तेमाल करते समय प्रॉक्सी, ऐक्शन या अन्य टास्क इनपुट न बदलें—अलग इनपुट से टकराव होता है। नया requestId तभी इस्तेमाल करें जब आप नया तार्किक टास्क बनाना चाहते हों।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।