En forespørsel kan fungere med session.get(), men mislykkes med sertifikatverifisering når den skrives om til PreparedRequest. Lavnivåets send-vei bruker ikke samme sammenslåing av miljøet som den ordinære 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)

Bruk den ferdig forberedte URL-en til sammenslåingen etter alle ønskede URL-endringer. Destinasjonen styrer proxy- og unntaksvalgene, så oppsett hentet for en tidligere URL kan være feil for det du faktisk sender.

Det er lett å glemme CA-oppsettet

Når normal tillit til miljøet er på, vurderer sammenslåingen REQUESTS_CA_BUNDLE med CURL_CA_BUNDLE som reserve hvis verifisering ikke er eksplisitt overstyrt. Direkte send med standardverdien for verify foretar ikke dette CA-oppslaget. Å deaktivere kontrollen kamuflerer forskjellen fremfor å angi ønsket sertifikatlager.

Session.prepare_request() tar også i bruk øktens klargjøringsatferd. Å lage forespørselen direkte med Request.prepare() er en selvstendig beslutning; ikke vent at øktkapsler eller øvrig øktklargjøring legges på automatisk.

Proxyer følger en mer avgrenset regel

Det er upresist å hevde at enhver PreparedRequest overser proxyvariabler i miljøet. I Requests 2.34.2 finner send standardproxyene når nøkkelordet proxies ikke er oppgitt. Sendes proxies={} til send, utelates akkurat den grenen som finner standardverdier.

Den tomme ordboken som gis til merge_environment_settings har en annen funksjon: sammenslåingen kan fylle den med gjeldende miljøruter før den videresendes til send. Å feste seg bare ved tomme ordbøker i to snutter overser de ulike metodene som får dem.

Hold klargjøring, sammenslåing av miljø og sending samlet i egen kode som bygger forespørsler. Bruker programmet med hensikt trust_env=False, blir det valget respektert; sammenslåingen presser ikke miljøinnstillinger inn i en klient som bevisst valgte dem bort.

Relaterte artikler