అభ్యర్థన 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 వాడితే విలీనం ఆ విధానాన్ని గౌరవిస్తుంది; పర్యావరణాన్ని తెలిసి ఆపిన క్లయింట్‌పై సెట్టింగ్‌లు రుద్దదు.

సంబంధిత వ్యాసాలు