Requests PreparedRequest og manglende miljøinnstillinger
Hold egne forberedte forespørsler i samsvar med Requests’ vanlige proxy- og CA-håndtering uten å anta at alle send-kall på lavt nivå ignorerer proxyer.
En forespørsel kan virke gjennom session.get() og feile ved sertifikatkontroll etter omskriving til PreparedRequest. Send-stien på lavt nivå utfører ikke samme miljøsammenslå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å sammen med den endelige forberedte URL-en etter planlagte URL-endringer. Proxy- og omgåelsesvalg avhenger av målet; innstillinger for en tidligere URL kan derfor være feil for forespørselen du faktisk sender.
CA-innstillingen er lett å overse
Med normal miljøtillit aktivert tar sammenslåingen hensyn til REQUESTS_CA_BUNDLE og reserven CURL_CA_BUNDLE når kontrollen ikke er uttrykkelig overstyrt. Et direkte send-kall med standard-verify gjør ikke dette CA-oppslaget. Å slå av kontroll skjuler forskjellen i stedet for å oppgi det tiltenkte sertifikatlageret.
Session.prepare_request() bruker også øktens forberedelsesatferd. Å lage en forespørsel direkte med Request.prepare() er et eget valg; forvent ikke automatisk bruk av øktinformasjonskapsler eller annen øktforberedelse.
Proxyer har en mer presis regel
Det er unøyaktig å si at alle PreparedRequest ignorerer proxymiljøvariabler. I Requests 2.34.2 finner send proxyens standardverdier når nøkkelordargumentet proxies mangler. Å gi proxies={} til send hopper over akkurat den standardgrenen.
Den tomme ordboken til merge_environment_settings har en annen rolle: sammenslåingen kan fylle den med aktuelle miljøruter før den går videre til send. Ser man bare en tom ordbok i to eksempler, overser man de forskjellige metodene som mottar den.
Hold forberedelse, miljøsammenslåing og sending samlet i egen kode for forespørselsbygging. Når applikasjonen bevisst bruker trust_env=False, respekterer sammenslåingen den policyen; den tvinger ikke miljøinnstillinger på en klient som bevisst har deaktivert dem.