Flask बैकएंड से solvethree को कॉल करें
solvethree टास्क बनाने और प्राप्त करने के लिए अलग-अलग Flask रूट इस्तेमाल करें। नीचे दिया गया POST पूरी समाधान प्रक्रिया का इंतज़ार किए बिना लौट आता है; कॉलर टास्क ID सहेजकर रखता है और टास्क तैयार या असफल होने तक GET रूट जाँचता रहता है।
इस पेज पर
डिपेंडेंसी इंस्टॉल करें और लक्ष्य कॉन्फ़िगर करें
- 1.
Python 3.10 या नया संस्करण इस्तेमाल करें
python -m pip install flaskसे Flask इंस्टॉल करें।python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whlसे आधिकारिक Python SDK इंस्टॉल करें। - 2.
सर्वर एनवायरनमेंट वैरिएबल सेट करें
SOLVETHREE_API_KEYको अपनी वर्कस्पेस API की पर औरINTEGRATION_KEYको उस सीक्रेट पर सेट करें जिसे आपका अधिकृत कॉलरX-Integration-Keyमें भेजेगा।CAPTCHA_SITEको लक्ष्य के होस्टनाम पर सेट करें, पूरे URL पर नहीं, औरSOLVETHREE_PROXYको इस टास्क के लिए इस्तेमाल होने वाले HTTP या HTTPS प्रॉक्सी URL पर सेट करें। ये वैल्यू सर्वर पर रखें। - 3.
साइट प्रोफ़ाइल सक्रिय करें
solvethree कंसोल में उस होस्टनाम के लिए एक सक्रिय प्रोफ़ाइल कॉन्फ़िगर करें, जो आपके वर्कस्पेस के लिए उपलब्ध हो।
CAPTCHA_SITEसेट करने से प्रोफ़ाइल नहीं बनती। अगर लक्ष्य अभी कॉन्फ़िगर नहीं है, तो साइट प्रोफ़ाइल सेटअप देखें।
उदाहरण ऐक्शन को login पर तय करता है और डिफ़ॉल्ट reCAPTCHA Enterprise v3 टास्क इस्तेमाल करता है। इसे चलाने से पहले उस ऐक्शन को लक्ष्य ऑपरेशन से मेल खाने के लिए बदलें। कॉलर अनुरोध बॉडी के ज़रिए साइट, ऐक्शन या प्रॉक्सी ओवरराइड नहीं कर सकता।
टास्क बनाने और प्राप्त करने के रूट जोड़ें
# pip install flask and the official solvethree SDK wheel.
import hmac
import os
from flask import Flask, abort, jsonify, request
from solvethree import Solvethree, SolvethreeError
app = Flask(__name__)
def client():
return Solvethree(os.environ["SOLVETHREE_API_KEY"])
@app.before_request
def authorize():
if not hmac.compare_digest(request.headers.get("x-integration-key", ""), os.environ["INTEGRATION_KEY"]):
abort(401)
@app.errorhandler(SolvethreeError)
def task_error(error):
return jsonify(requestId=error.request_id, taskId=error.task_id), 502
@app.errorhandler(ValueError)
def invalid_input(error):
return jsonify(error="Invalid task input or ID"), 400
@app.post("/captcha/tasks")
def create():
task = {"site": os.environ["CAPTCHA_SITE"], "action": "login", "proxy": os.environ["SOLVETHREE_PROXY"]}
if request.headers.get("x-request-id"):
task["requestId"] = request.headers["x-request-id"]
return jsonify(client().create_task(task, wait_ms=0, timeout=20))
@app.get("/captcha/tasks/<task_id>")
def retrieve(task_id):
return jsonify(client().get_task(task_id, wait_ms=15000, timeout=25))उदाहरण को app.py के रूप में सहेजें। एनवायरनमेंट वैरिएबल सेट होने पर इसे स्थानीय रूप से python -m flask --app app run से शुरू करें। रूट POST /captcha/tasks और GET /captcha/tasks/<task_id> हैं। Flask को अलग URLconf की ज़रूरत नहीं है: डेकोरेटर दोनों रूट रजिस्टर करते हैं। स्थानीय रूप से शुरू करने की जानकारी के लिए Flask क्विकस्टार्ट देखें; अपना मौजूदा प्रोडक्शन WSGI कॉन्फ़िगरेशन बनाए रखें।
टास्क बनाने में wait_ms=0 के साथ 20 सेकंड का नेटवर्क टाइमआउट इस्तेमाल होता है। इससे समाधान प्रक्रिया का इंतज़ार छोड़ा जाता है, HTTP अनुरोध का नहीं। टास्क प्राप्त करते समय अपडेट के लिए अधिकतम 15 सेकंड तक इंतज़ार की अनुमति है, और नेटवर्क टाइमआउट 25 सेकंड है। दोनों व्यू सिंक्रोनस SDK इस्तेमाल करते हैं, इसलिए SDK कॉल चलने के दौरान हर व्यू अपने अनुरोध वर्कर को व्यस्त रखता है।
POST भेजने से पहले अनुरोध ID सहेजें
- 1.
हर तार्किक टास्क के लिए एक अनुरोध ID बनाएँ
POST /captcha/tasksको कॉल करने से पहले इसे सहेजें, फिर इसेX-Integration-Keyके साथX-Request-IDके रूप में भेजें। 1–64 ASCII अक्षर, अंक, अंडरस्कोर या हाइफ़न इस्तेमाल करें। इस POST में टास्क बॉडी की ज़रूरत नहीं है, क्योंकि सर्वर अपने निश्चित कॉन्फ़िगरेशन से टास्क बनाता है। - 2.
लौटाया गया टास्क ID सहेजें
सफल HTTP प्रतिक्रिया के बाद, परिणाम का
idसहेजें। दोबाराX-Integration-Keyभेजकर, इसेGET /captcha/tasks/<task_id>से प्राप्त करें। - 3.
नया टास्क बनाने के बजाय अनिश्चित निर्माण का परिणाम पुनः प्राप्त करें
यदि POST कनेक्शन टाइम आउट हो जाए, तब भी टास्क बन चुका हो सकता है। यदि आपके पास उसकी ID है, तो टास्क प्राप्त करें। अन्यथा, मौजूदा टास्क पुनः प्राप्त करने के लिए उसी
X-Request-IDऔर बिना बदले टास्क इनपुट के साथ POST दोहराएँ। साइट, ऐक्शन या प्रॉक्सी बदलने के बाद उसी ID का इस्तेमाल करने से कॉन्फ़्लिक्ट होता है।
नमूने में यह हेडर वैकल्पिक है, लेकिन इसे छोड़ने पर, टास्क बन जाने और उसकी प्रतिक्रिया खो जाने की स्थिति में पुनः प्राप्ति का यह विकल्प नहीं रहता। केवल इसलिए नई ID न बनाएँ कि पहला अनुरोध टाइम आउट हो गया।
टास्क की स्थिति से पहले HTTP त्रुटियाँ सँभालें
पहले Flask प्रतिक्रिया का HTTP स्टेटस जाँचें। उदाहरण में इंटीग्रेशन कुंजी गायब या गलत होने पर 401, पकड़े गए ValueError के लिए 400 और पकड़े गए SolvethreeError के लिए 502 लौटाया जाता है। उस 502 की बॉडी पुनः प्राप्ति के लिए requestId और taskId उपलब्ध कराती है; यह टास्क-स्टेटस पेलोड नहीं है और केवल इससे यह नहीं माना जा सकता कि टास्क विफल हुआ।
| कार्य की स्थिति | कॉलर की कार्रवाई |
|---|---|
| लंबित | उसी टास्क ID को रखें और दोबारा प्राप्त करें। |
| हल किया जा रहा है | उसी टास्क ID को रखें और दोबारा प्राप्त करें। |
| तैयार | पोलिंग बंद करें और समाधान पढ़ें। |
| failed | पोलिंग बंद करें और errorCode तथा error जाँचें। हल करने के विफल प्रयासों का शुल्क वापस कर दिया जाता है। |
मूल प्रॉक्सी और लौटाई गई पहचान के साथ टोकन सबमिट करें
केवल ready परिणाम में उपयोग योग्य समाधान होता है। इच्छित लक्ष्य को solution.token भेजें—टास्क ID नहीं—और लौटाई गई solution.userAgent तथा solution.secChUa ब्राउज़र पहचान का इस्तेमाल करें।
टास्क बनाने के लिए इस्तेमाल की गई उसी प्रॉक्सी से सबमिट करें। इस उदाहरण में एक निश्चित SOLVETHREE_PROXY इस्तेमाल होती है, इसलिए मूल प्रॉक्सी कॉन्फ़िगरेशन को टास्क के साथ सहेजकर रखें; यह न मानें कि बाद में भी एनवायरनमेंट का मौजूदा मान वही रहेगा। Flask रूट SDK का परिणाम लौटाते हैं; वे लक्ष्य पर सबमिट नहीं करते और न ही कॉलर की प्रॉक्सी कॉन्फ़िगर करते हैं।
टोकन, प्रॉक्सी, ब्राउज़र पहचान और इच्छित लक्ष्य को साथ रखें। टास्क तैयार होने का मतलब है कि solvethree ने समाधान जनरेट कर दिया है; उसकी स्वीकृति बाद में भेजे गए एप्लिकेशन अनुरोध पर लक्ष्य की प्रतिक्रिया से तय होती है।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।