अनुरोध session.get() से चलकर PreparedRequest के रूप में दोबारा लिखने के बाद प्रमाणपत्र सत्यापन में विफल हो सकता है। निचले स्तर का send रास्ता सामान्य request विधि वाला पर्यावरण विलय नहीं करता।

import requests

with requests.Session() as session:
    request = requests.Request("GET", "https://example.com/")
    prepared = session.prepare_request(request)

    settings = session.merge_environment_settings(
        prepared.url, {}, None, None, None
    )
    response = session.send(
        prepared,
        timeout=(5, 15),
        **settings,
    )
    response.raise_for_status()
    print(response.status_code)

मनचाहे URL बदलावों के बाद अंतिम तैयार URL से विलय करें। प्रॉक्सी और बायपास फैसले गंतव्य पर निर्भर हैं, इसलिए पुराने URL की सेटिंग असल भेजे जाने वाले अनुरोध के लिए गलत हो सकती है।

CA सेटिंग आसानी से छूट जाती है

सामान्य पर्यावरण भरोसा चालू हो और सत्यापन स्पष्ट रूप से ओवरराइड न हो, तो विलय REQUESTS_CA_BUNDLE और उसके विकल्प CURL_CA_BUNDLE को देखता है। डिफ़ॉल्ट verify के साथ सीधा send यह CA खोज नहीं करता। सत्यापन बंद करना इच्छित प्रमाणपत्र भंडार देने के बजाय अंतर छिपाता है।

Session.prepare_request() सत्र की तैयारी वाला व्यवहार भी लागू करता है। सीधे Request.prepare() से अनुरोध बनाना अलग चुनाव है; उससे सत्र कुकी या दूसरी सत्र तैयारी अपने आप होने की अपेक्षा न करें।

प्रॉक्सी के लिए अधिक विशिष्ट नियम है

यह कहना गलत होगा कि हर PreparedRequest प्रॉक्सी पर्यावरण चर अनदेखे करता है। Requests 2.34.2 में proxies नाम वाला तर्क न होने पर send डिफ़ॉल्ट प्रॉक्सी तय करता है। send को proxies={} देने से वही खास डिफ़ॉल्ट-निर्धारण शाखा छूटती है।

merge_environment_settings को दिए खाली डिक्शनरी की भूमिका अलग है: विलय send को देने से पहले उसे लागू पर्यावरण रूट से भर सकता है। दो कोड में केवल खाली डिक्शनरी देखने से उसे लेने वाली अलग विधियाँ छूट जाती हैं।

अपने अनुरोध-निर्माण कोड में तैयारी, पर्यावरण विलय और भेजना साथ रखें। ऐप जानबूझकर trust_env=False इस्तेमाल करे तो विलय उस नीति का सम्मान करता है; पर्यावरण को जानबूझकर बंद करने वाले क्लाइंट पर सेटिंग नहीं थोपता।

संबंधित लेख