Session-proxyer i Python Requests og miljøets forrang
Gjør ruting i Python Requests forutsigbar når session.proxies, miljøvariabler, innstillinger per forespørsel og trust_env virker sammen.
Hvis session.proxies peker på ett endepunkt, men skriptet bruker skallets proxy, løser det ikke konflikten å tilordne den samme ordboken på nytt. Requests kan slå sammen miljøets proxyinnstillinger med forrang foran Sessions standardverdier. Velg om Session fortsatt skal oppdage innstillinger fra miljøet.
Behold miljøoppdagelse, oppgi ruter i forespørselen
Send uttrykkelige verdier til det enkelte kallet, slik Requests anbefaler for å unngå konflikten mellom Session og miljø:
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
with requests.Session() as session:
response = session.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
Bytt ut den lokale lytteren med din egen. Sammenligner du offentlige HTTP-endepunkter, velg kandidater fra listen over HTTP-proxyer og hold Session-policyen fast. Dette styrer de oppgitte oppføringsverdiene i tilordningen; velg bevisst også for andre skjemaer eller verter programmet bruker. En tjeneste, IDE, container eller CI-kjører kan arve et annet miljø enn terminalen.
La Session styre sine egne innstillinger
Hvis programmet ikke skal oppdage proxyer fra miljøet, sett policyen før den første forespørselen:
with requests.Session() as session:
session.trust_env = False
session.proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = session.get(
"https://example.com/",
timeout=(5, 15),
)
response.raise_for_status()
trust_env=False påvirker også miljørelatert sertifikatkonfigurasjon og automatisk netrc-autentisering. Ta hensyn til disse avhengighetene før valget. For en godkjent privat CA-sertifikatsamling kan du angi en uttrykkelig sti:
response = session.get(
"https://example.com/",
timeout=(5, 15),
verify="/path/to/approved-ca-bundle.pem",
)
Bruk den faktisk godkjente samlingen og la verifiseringen være på. Hold en separat Session for hver rutingspolicy i stedet for å endre én mens annet arbeid bruker den.
Hvis ingen av alternativene forklarer programmets rute, sammenlign en isolert Session med programmet i samme kjøremiljø og mot samme harmløse mål. Noter hvilke proxyvariabler som finnes, verdien av trust_env og om kallet oppgir proxies; hold URL-er med påloggingsopplysninger ute av delte logger. Suksess i isolasjon retter neste undersøkelse mot Session-opprettelse, adaptere, flyter med forberedte forespørsler eller egne transporter. En miljøtest med curl avgjør ikke Requests’ egen sammenslåingsatferd.