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.

Relaterte artikler