En forespørgsel kan virke gennem session.get() og fejle ved certifikatkontrol efter omskrivning til PreparedRequest. Send-stien på lavt niveau udfører ikke samme miljøsammenfletning som den normale request-metode.

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)

Flet med den endelige forberedte URL efter de tilsigtede URL-ændringer. Proxy- og omgåelsesbeslutninger afhænger af destinationen, så indstillinger fra en tidligere URL kan være forkerte for den forespørgsel, du faktisk sender.

CA-indstillingen er let at overse

Med normal miljøtillid aktiveret tager sammenfletningen højde for REQUESTS_CA_BUNDLE og dens reserve CURL_CA_BUNDLE, når kontrollen ikke udtrykkeligt er overstyret. Et direkte send-kald med standard-verify udfører ikke dette CA-opslag. At slå kontrol fra skjuler forskellen i stedet for at angive det tilsigtede certifikatlager.

Session.prepare_request() anvender også sessionens forberedelsesadfærd. At oprette en forespørgsel direkte med Request.prepare() er et særskilt valg; forvent ikke, at det automatisk anvender sessionscookies eller anden sessionsforberedelse.

Proxyer har en mere præcis regel

Det er upræcist at sige, at alle PreparedRequest ignorerer proxymiljøvariabler. I Requests 2.34.2 finder send proxyens standardværdier, når nøgleordsargumentet proxies mangler. Hvis du giver proxies={} til send, springes netop den standardopløsningsgren over.

Den tomme dictionary givet til merge_environment_settings har en anden rolle: sammenfletningen kan fylde den med relevante miljøruter, før den sendes videre til send. Hvis man kun ser en tom dictionary i to eksempler, overser man de forskellige metoder, der modtager den.

Hold forberedelse, miljøsammenfletning og afsendelse samlet i egen forespørgselskode. Når applikationen bevidst bruger trust_env=False, respekterer sammenfletningen den politik; den tvinger ikke miljøindstillinger ind i en klient, der bevidst har deaktiveret dem.

Relaterede artikler