Requests PreparedRequest en ontbrekende omgevingsinstellingen
Houd eigen voorbereide verzoeken in lijn met Requests’ normale proxy- en CA-verwerking, zonder aan te nemen dat elke send-aanroep op laag niveau proxy’s negeert.
Een verzoek kan via session.get() werken en na herschrijven als PreparedRequest falen bij certificaatverificatie. Het laagliggende send-pad voert niet dezelfde omgevingssamenvoeging als de normale request-methode uit.
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)
Voeg samen met de uiteindelijke voorbereide URL, na alle bedoelde URL-wijzigingen. Proxy- en omzeilingsbeslissingen hangen van de bestemming af; instellingen voor een eerdere URL kunnen verkeerd zijn voor het echt verstuurde verzoek.
De CA-instelling wordt gemakkelijk gemist
Met normaal vertrouwen in de omgeving ingeschakeld houdt de samenvoeging rekening met REQUESTS_CA_BUNDLE en de terugval CURL_CA_BUNDLE als verificatie niet expliciet is overschreven. send rechtstreeks met standaard-verify aanroepen doet die CA-zoekactie niet. Verificatie uitschakelen verbergt het verschil in plaats van de bedoelde certificaatopslag te leveren.
Session.prepare_request() past ook het voorbereidingsgedrag van de sessie toe. Een verzoek rechtstreeks met Request.prepare() maken is een andere keuze; verwacht niet dat sessiecookies of andere sessievoorbereiding automatisch worden toegepast.
Voor proxy’s geldt een specifiekere regel
Het zou onjuist zijn te zeggen dat elk PreparedRequest proxyomgevingsvariabelen negeert. In Requests 2.34.2 bepaalt send standaardproxy’s als het sleutelwoordargument proxies ontbreekt. proxies={} aan send geven slaat die specifieke tak voor standaardbepaling over.
Het lege woordenboek aan merge_environment_settings heeft een andere rol: de samenvoeging kan het vullen met passende omgevingsroutes voordat het naar send gaat. Wie alleen een leeg woordenboek in twee voorbeelden ziet, mist de verschillende ontvangende methoden.
Houd in eigen verzoekopbouw voorbereiding, omgevingssamenvoeging en verzending bij elkaar. Gebruikt de toepassing bewust trust_env=False, dan respecteert de samenvoeging dat beleid; het dwingt geen omgeving op aan een client die deze doelbewust heeft uitgeschakeld.