Requests PreparedRequest og manglande miljøinnstillingar
Hald eigne førebudde førespurnader i samsvar med Requests si vanlege proxy- og CA-handtering utan å tru at alle send-kall på lågt nivå ignorerer proxyar.
Ein førespurnad kan verke gjennom session.get() og feile ved sertifikatkontroll etter omskriving til PreparedRequest. Send-stien på lågt nivå utfører ikkje same miljøsamanslåing som den normale request-metoden.
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)
Slå saman med den endelege førebudde URL-en etter planlagde URL-endringar. Proxy- og omgåingsval er avhengige av målet; innstillingar for ein tidlegare URL kan difor vere feil for førespurnaden du faktisk sender.
CA-innstillinga er lett å oversjå
Med normal miljøtillit aktivert tek samanslåinga omsyn til REQUESTS_CA_BUNDLE og reserven CURL_CA_BUNDLE når kontrollen ikkje er uttrykkeleg overstyrt. Eit direkte send-kall med standard-verify gjer ikkje dette CA-oppslaget. Å slå av kontroll skjuler skilnaden i staden for å oppgje det tiltenkte sertifikatlageret.
Session.prepare_request() brukar òg førebuingsåtferda til økta. Å lage ein førespurnad direkte med Request.prepare() er eit eige val; forvent ikkje automatisk bruk av øktinformasjonskapslar eller anna øktførebuing.
Proxyar har ein meir presis regel
Det er unøyaktig å seie at alle PreparedRequest ignorerer proxymiljøvariablar. I Requests 2.34.2 finn send standardverdiane for proxy når nøkkelordargumentet proxies manglar. Å gje proxies={} til send hoppar over akkurat den standardgreina.
Den tomme ordboka til merge_environment_settings har ei anna rolle: samanslåinga kan fylle henne med aktuelle miljøruter før ho går vidare til send. Ser ein berre ei tom ordbok i to døme, overser ein dei ulike metodane som tek imot henne.
Hald førebuing, miljøsamanslåing og sending samla i eigen kode for førespurnadsbygging. Når applikasjonen medvite brukar trust_env=False, respekterer samanslåinga den politikken; ho tvingar ikkje miljøinnstillingar på ein klient som medvite har deaktivert dei.