Requests PreparedRequest og miljøoppsett som mangler
La egne forberedte forespørsler følge Requests’ vanlige proxy- og CA-behandling uten å forutsette at ethvert lavnivå-send ignorerer proxyer.
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.