Django व्यू में solvethree का उपयोग करें
POST व्यू में टास्क बनाएँ, उसकी ID लौटाएँ और कॉलर को उसकी स्थिति प्राप्त करने दें। हल पूरा होने तक निर्माण अनुरोध खुला न रखें।
दिए गए व्यू एक कॉन्फ़िगर किए गए reCAPTCHA Enterprise लक्ष्य और एक ही प्रॉक्सी का इस्तेमाल करते हैं। इन्हें ऐसे मौजूदा Django प्रोजेक्ट में जोड़ें जिसमें प्रमाणीकरण और मानक CSRF मिडलवेयर सक्षम हों।
इस पेज पर
SDK इंस्टॉल करें और लक्ष्य कॉन्फ़िगर करें
- 1.
Django एनवायरनमेंट में इंस्टॉल करें
आधिकारिक SDK के लिए Python 3.10+ आवश्यक है। Django चलाने वाले एनवायरनमेंट में
python -m pip install https://solvethree.com/downloads/solvethree_sdk-0.1.0-py3-none-any.whlइस्तेमाल करें। - 2.
सर्वर एनवायरनमेंट वैरिएबल सेट करें
SOLVETHREE_API_KEYको अपने वर्कस्पेस की API कुंजी,CAPTCHA_SITEको लक्ष्य के होस्टनाम—पूर्ण URL नहीं—औरSOLVETHREE_PROXYको हल करने तथा बाद में लक्ष्य पर सबमिट करने के लिए इस्तेमाल होने वाली प्रॉक्सी पर सेट करें। API कुंजी और प्रॉक्सी क्रेडेंशियल सर्वर पर रखें। - 3.
साइट की प्रोफ़ाइल सक्रिय करें
कंसोल में उस होस्टनाम के लिए एक सक्रिय प्रोफ़ाइल कॉन्फ़िगर करें, जो आपके वर्कस्पेस के लिए उपलब्ध हो। होस्टनाम और ऐक्शन भेजने से प्रोफ़ाइल नहीं बनती। साइट प्रोफ़ाइल सेटअप देखें।
उदाहरण में ऐक्शन login पर निश्चित है और कॉलर से लक्ष्य की कोई सेटिंग नहीं ली जाती। यदि आपके कॉन्फ़िगर किए गए लक्ष्य के लिए कोई दूसरा ऐक्शन आवश्यक है, तो इसे बदलें। अनुरोध डिफ़ॉल्ट enterprise-v3 मोड इस्तेमाल करता है; इसके लिए site, action और proxy या proxyCandidates में से ठीक एक आवश्यक है, type या url नहीं।
प्रमाणीकरण वाले व्यू जोड़ें
# views.py in an existing Django project with authentication/CSRF configured.
import os
from django.contrib.auth.decorators import login_required
from django.http import JsonResponse
from django.views.decorators.http import require_GET, require_POST
from solvethree import Solvethree, SolvethreeError
def client():
return Solvethree(os.environ["SOLVETHREE_API_KEY"])
@login_required
@require_POST
def create_captcha(request):
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"]
try:
return JsonResponse(client().create_task(task, wait_ms=0, timeout=20))
except ValueError:
return JsonResponse({"error": "Invalid task input"}, status=400)
except SolvethreeError as error:
return JsonResponse({"requestId": error.request_id, "taskId": error.task_id}, status=502)
@login_required
@require_GET
def get_captcha(request, task_id):
try:
return JsonResponse(client().get_task(task_id, wait_ms=15000, timeout=25))
except ValueError:
return JsonResponse({"error": "Invalid task ID"}, status=400)
except SolvethreeError as error:
return JsonResponse({"requestId": error.request_id, "taskId": error.task_id}, status=502)
# urls.py: import these views and add to urlpatterns:
# path("captcha/tasks", create_captcha),
# path("captcha/tasks/<str:task_id>", get_captcha),create_task में wait_ms=0 इस्तेमाल होता है, इसलिए यह पूरा समाधान होने की प्रतीक्षा किए बिना टास्क लौटा देता है। इसकी HTTP कॉल का टाइमआउट 20 सेकंड है। प्राप्ति व्यू टास्क अपडेट के लिए अधिकतम 15 सेकंड प्रतीक्षा कर सकता है, और उसका HTTP टाइमआउट 25 सेकंड है। ये सिंक्रोनस SDK कॉल हैं: प्रतीक्षा के दौरान भी प्राप्ति अनुरोध अपने Django वर्कर को व्यस्त रखता है।
login_required केवल साइन-इन किए हुए उपयोगकर्ताओं को ऐक्सेस देता है; मेथड डेकोरेटर निर्माण के लिए POST और प्राप्ति के लिए GET की अनुमति देते हैं। Django की सामान्य CSRF सुरक्षा बनाए रखें और POST करते समय उसका CSRF टोकन शामिल करें। csrf_exempt न जोड़ें।
रूट जोड़ें और Django शुरू करें
- 1.
मौजूदा URLconf अपडेट करें
django.urlsसेpathइंपोर्ट करें और अपने ऐप के व्यू मॉड्यूल सेcreate_captchaतथाget_captchaइंपोर्ट करें। उदाहरण के अंत में दिखाई गई दो रूट एंट्री मौजूदाurlpatternsमें जोड़ें। यदि आप ऐप URLconf इस्तेमाल करते हैं, तो सुनिश्चित करें कि प्रोजेक्ट URLconf में वह शामिल है। - 2.
डेवलपमेंट सर्वर शुरू करें
प्रोसेस के लिए एनवायरनमेंट वेरिएबल उपलब्ध रखते हुए,
manage.pyवाली डायरेक्टरी सेpython manage.py runserverचलाएँ। एंडपॉइंट कॉल करने से पहले अपने प्रोजेक्ट का मौजूदा लॉगिन फ़्लो इस्तेमाल करें। - 3.
रजिस्टर किए गए पाथ इस्तेमाल करें
यदि किसी बाहरी URL प्रीफ़िक्स के अंतर्गत नहीं हैं, तो निर्माण के लिए POST
/captcha/tasksऔर प्राप्ति के लिए GET/captcha/tasks/<task_id>है। दिए गए रूट के अंत में स्लैश नहीं है। अपने प्रोजेक्ट URLconf से जोड़ा गया कोई भी प्रीफ़िक्स शामिल करें।
एक बार बनाएँ, फिर टास्क प्राप्त करें
- 1.
POST भेजने से पहले ID सहेजें
हर तार्किक टास्क के लिए नया
X-Request-IDचुनें और निर्माण का परिणाम निश्चित होने तक उसे रखें। 1–64 ASCII अक्षर, अंक, अंडरस्कोर या हाइफ़न इस्तेमाल करें। व्यू इस हेडर को टास्क केrequestIdके रूप में आगे भेजता है। - 2.
टास्क की स्थिति से पहले HTTP सफलता जाँचें
नमूना पकड़ी गई इनपुट-सत्यापन त्रुटियों के लिए HTTP 400 और पकड़ी गई SDK त्रुटियों के लिए 502 लौटाता है। सफल प्रतिक्रिया में टास्क पेलोड होता है; उसका
idऔरstatusपढ़ें। HTTP सफलता का मतलब है कि अनुरोध सफल हुआ, यह नहीं कि टोकन तैयार है। - 3.
टास्क पूरा होने तक उसे प्राप्त करते रहें
लौटाई गई टास्क ID के साथ GET एंडपॉइंट कॉल करें।
pendingयाsolvingहोने पर जारी रखें।readyहोने पर समाधान इस्तेमाल करें।failedहोने पर पोलिंग बंद करें औरerrorCodeतथाerrorजाँचें; हल करने के विफल प्रयासों का शुल्क वापस कर दिया जाता है। अमान्य इनपुट को बिना बदले दोबारा भेजने के बजाय उन्हें ठीक करें। - 4.
अनिश्चित निर्माण का परिणाम पुनः प्राप्त करें
यदि POST टाइम आउट हो जाए या SDK त्रुटि लौटाए, तो तुरंत नई ID के साथ दूसरा टास्क न बनाएँ। यदि मौजूदा टास्क की ID पता है, तो उसे प्राप्त करें। अन्यथा, उसे पुनः प्राप्त करने के लिए मूल
X-Request-IDऔर बिना बदले टास्क इनपुट के साथ POST दोहराएँ। अलग इनपुट के साथ उस ID का दोबारा इस्तेमाल करने से कॉन्फ़्लिक्ट होता है—इसमें कॉन्फ़िगर किए गए होस्टनाम, ऐक्शन या प्रॉक्सी में बदलाव भी शामिल हैं।
निदान के लिए SDK-त्रुटि प्रतिक्रिया में एक्सेप्शन से मिले requestId और taskId शामिल होते हैं। कॉलर का मूल X-Request-ID अलग से सहेजें, ताकि पुनः प्राप्ति उस प्रतिक्रिया के मिलने पर निर्भर न हो। विफलताएँ सँभालने के लिए CAPTCHA API त्रुटियाँ देखें।
उसी प्रॉक्सी और लौटाई गई पहचान के साथ टोकन सबमिट करें
केवल ready टास्क में उपयोग योग्य समाधान होता है। इच्छित लक्ष्य को भेजने वाला मान solution.token है, टास्क ID नहीं। SOLVETHREE_PROXY में कॉन्फ़िगर की गई मूल प्रॉक्सी के साथ, लौटाई गई solution.userAgent और solution.secChUa ब्राउज़र पहचान इस्तेमाल करें।
ये व्यू लक्ष्य पर कुछ भी सबमिट नहीं करते। आपके सबमिशन कोड को वही प्रॉक्सी बनाए रखनी होगी और लौटाई गई पहचान लागू करनी होगी; टोकन को किसी असंबंधित ब्राउज़र सेशन में लौटाने से यह अपने-आप नहीं होता। प्रॉक्सी क्रेडेंशियल सर्वर पर रखें और समाधान को किसी दूसरे लक्ष्य URL या ब्राउज़र पहचान के साथ न मिलाएँ।
स्रोत और API संदर्भ
अपना पहला टास्क चलाएँ।
$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।