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.

Relaterte artiklar