हल किया गया टोकन सबमिट करते समय एप्लिकेशन की कुकीज़ बनाए रखें

solvethree द्वारापढ़ने में 4 मिनट

हल किया गया reCAPTCHA टोकन एप्लिकेशन की सेशन कुकीज़ या CSRF मान की जगह नहीं लेता। फ़ॉर्म को उसी requests.Session के ज़रिए प्राप्त और सबमिट करें, ताकि POST में GET के दौरान मिली कुकीज़ बनी रहें।

एप्लिकेशन के दोनों अनुरोधों के लिए सॉल्वर द्वारा लौटाए गए ब्राउज़र हेडर और उसी प्रॉक्सी का उपयोग करें। उदाहरण पहले सॉल्व करता है, ताकि फ़ॉर्म खोलने से पहले वे हेडर उपलब्ध हों।

इस पेज पर

फ़ॉर्म के GET और POST को एक ही सेशन में रखें

Python 3.10+ का उपयोग करें, जिसमें requests और आधिकारिक solvethree Python SDK इंस्टॉल हों। लक्ष्य होस्टनेम के लिए आपके वर्कस्पेस में सक्रिय प्रोफ़ाइल होना ज़रूरी है; टास्क में उसका होस्टनेम भेजने से प्रोफ़ाइल नहीं बनती। यदि वह कॉन्फ़िगर नहीं है, तो साइट प्रोफ़ाइल सेटअप देखें।

  • TARGET_URL को अपने एप्लिकेशन के फ़ॉर्म URL पर सेट करें। अपने नियंत्रण वाला यह डेमो GET और POST के लिए एक ही URL उपयोग करता है।
  • SOLVETHREE_PROXY को उस एक प्रॉक्सी पर सेट करें जिसका उपयोग सॉल्व करने और एप्लिकेशन के दोनों अनुरोधों के लिए किया जाएगा।
  • SOLVETHREE_API_KEY को अपने वर्कस्पेस की API कुंजी पर सेट करें। यह कोड सर्वर-साइड चलाएँ।
requests.Session · एप्लिकेशन कुकी और CSRF मान बनाए रखें
# This owned demo form has an input named csrf_token and g-recaptcha-response.
import os
from html.parser import HTMLParser
from urllib.parse import urlsplit
import requests
from solvethree import Solvethree

class FormParser(HTMLParser):
    csrf = None
    def handle_starttag(self, tag, attributes):
        values = dict(attributes)
        if tag == "input" and values.get("name") == "csrf_token":
            self.csrf = values.get("value")

target = os.environ["TARGET_URL"]
proxy = os.environ["SOLVETHREE_PROXY"]
request = {"site": urlsplit(target).hostname, "action": "login", "proxy": proxy}
# Obtain the solver's browser headers before opening the application session.
result = Solvethree(os.environ["SOLVETHREE_API_KEY"]).solve(request, timeout=180)
solution = result["solution"]
with requests.Session() as session:
    session.headers.update({"User-Agent": solution["userAgent"], "sec-ch-ua": solution["secChUa"]})
    proxies = {"http": proxy, "https": proxy}
    page = session.get(target, proxies=proxies, timeout=20, allow_redirects=False)
    page.raise_for_status()
    parser = FormParser(); parser.feed(page.text)
    if not parser.csrf: raise RuntimeError("The expected demo CSRF input was not found")
    response = session.post(target, proxies=proxies, timeout=20, allow_redirects=False,
        data={"csrf_token": parser.csrf, "g-recaptcha-response": solution["token"]})
    print("Application HTTP status:", response.status_code)
    # Use the actual form's submit URL, fields and session rules. Inspect its result.

SDK की solve कॉल टास्क बनाती है और उसके तैयार होने तक पोल करती है या अपवाद उत्पन्न करती है। इसके बाद उदाहरण सेशन पर solution.userAgent और solution.secChUa लागू करता है। GET उसके कुकी जार को भरता है; POST उसी जार का दोबारा उपयोग करता है और फ़ॉर्म से पार्स किए गए CSRF मान के साथ solution.token सबमिट करता है।

डेमो के login ऐक्शन, सबमिट URL और फ़ॉर्म फ़ील्ड को अपने एप्लिकेशन के अनुसार बदलें। csrf_token इस फ़ॉर्म का फ़ील्ड नाम है, solvethree की आवश्यकता नहीं। यदि आपका फ़ॉर्म किसी अन्य नाम या संरचना का उपयोग करता है, तो HTML पार्सर समायोजित करें और लॉगिन क्रेडेंशियल जैसे अन्य ज़रूरी फ़ील्ड शामिल करें। यदि सबमिट URL, फ़ॉर्म URL से अलग है, तब भी उसी सेशन का उपयोग करें।

यदि एप्लिकेशन POST अस्वीकार करता है

प्रिंट हुआ HTTP स्टेटस जाँच की शुरुआत है, लॉगिन सफल होने का प्रमाण नहीं। दूसरे सॉल्व के लिए भुगतान करने से पहले एप्लिकेशन की प्रतिक्रिया और भेजे गए अनुरोध की जाँच करें। तैयार टास्क का मतलब है कि समाधान जनरेट हो गया है; सबमिशन स्वीकार करना है या नहीं, यह अब भी एप्लिकेशन तय करता है।

CSRF इनपुट नहीं मिलता।

GET प्रतिक्रिया का स्टेटस और बॉडी जाँचें। रीडायरेक्ट का अनुसरण बंद है, इसलिए रीडायरेक्ट प्रतिक्रिया अपेक्षित फ़ॉर्म नहीं है।

यह आज़माएँ: उसी सेशन के ज़रिए जानबूझकर सही फ़ॉर्म प्राप्त करें, फिर पार्सर को उसके वास्तविक CSRF फ़ील्ड के अनुसार समायोजित करें।

एप्लिकेशन सेशन न होने या CSRF मान अमान्य होने की सूचना देता है।

जाँचें कि GET को कुकीज़ मिली थीं या नहीं, POST ने लागू कुकीज़ भेजी थीं या नहीं, और उसका CSRF मान उसी फ़ॉर्म प्रतिक्रिया से आया था या नहीं।

यह आज़माएँ: दोनों अनुरोध एक ही requests.Session में रखें। फ़ॉर्म एक क्लाइंट से प्राप्त करके दूसरे से सबमिट न करें।

एप्लिकेशन CAPTCHA अस्वीकार करता है।

भेजे जा रहे टोकन फ़ील्ड, ऐक्शन, प्रॉक्सी, User-Agent और sec-ch-ua की जाँच करें। पुष्टि करें कि आप टास्क ID या पुराने टोकन के बजाय solution.token भेज रहे हैं।

यह आज़माएँ: मौजूदा टोकन, सॉल्व करने के लिए इस्तेमाल की गई प्रॉक्सी और लौटाए गए ब्राउज़र हेडर का उपयोग करें। यदि टोकन समाप्त हो गया है या उसका आकलन पहले ही हो चुका है, तो सबमिशन के करीब नया टोकन प्राप्त करें।

POST पूरा होता है, लेकिन लॉगिन नहीं होता।

प्रतिक्रिया की बॉडी और किसी भी रीडायरेक्ट गंतव्य के साथ-साथ वास्तविक सबमिट URL और ज़रूरी फ़ॉर्म फ़ील्ड की जाँच करें।

यह आज़माएँ: डेमो के फ़ॉर्म डेटा को एप्लिकेशन की अपेक्षाओं के अनुसार ढालें। CAPTCHA टोकन क्रेडेंशियल या एप्लिकेशन के अन्य गायब फ़ील्ड उपलब्ध नहीं कराता।

अपना पहला टास्क चलाएँ।

$5 वर्कस्पेस क्रेडिट के साथ शुरुआत करें।

वर्कस्पेस बनाएँ
हल किया गया टोकन सबमिट करते समय एप्लिकेशन की कुकीज़ बनाए रखें · solvethree