Requests PreparedRequest र हराएका वातावरण सेटिङ
हरेक तल्लो तहको send ले प्रोक्सी बेवास्ता गर्छ नभनी आफ्ना तयार अनुरोधलाई Requests को सामान्य प्रोक्सी र CA व्यवस्थापनसँग मिलाउनुहोस्।
अनुरोध 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 चलाउँदा मर्जले त्यो नीति मान्छ; वातावरण जानाजान बन्द गरेको क्लाइन्टमा सेटिङ जबर्जस्ती घुसाउँदैन।