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 वापरते तेव्हा मर्ज ती नीती मानते; पर्यावरण जाणूनबुजून बंद केलेल्या क्लायंटवर सेटिंग लादत नाही.