Session-proxyer i Python Requests og miljøets forrang
Gør routning i Python Requests forudsigelig, når session.proxies, miljøvariabler, indstillinger pr. forespørgsel og trust_env spiller sammen.
Hvis session.proxies peger på ét endepunkt, men scriptet bruger shellens proxy, løser det ikke konflikten at tildele den samme ordbog igen. Requests kan flette miljøets proxyindstillinger med forrang frem for Sessions standarder. Vælg, om Session fortsat skal opdage indstillinger i miljøet.
Behold miljøopdagelse, angiv ruter i forespørgslen
Send udtrykkelige værdier til det enkelte kald, som Requests anbefaler for at undgå denne konflikt mellem 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()
Erstat den lokale lytter med din egen. Sammenligner du offentlige HTTP-endepunkter, så vælg kandidater fra listen over HTTP-proxyer og hold Session-politikken fast. Det styrer de angivne mappingposter; træf også et bevidst valg for andre skemaer eller værter, programmet bruger. En tjeneste, IDE, container eller CI-runner kan arve et andet miljø end terminalen.
Lad Session styre sine egne indstillinger
Hvis programmet ikke skal opdage proxyer fra miljøet, så indstil politikken før den første forespørgsel:
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ørelateret certifikatkonfiguration og automatisk netrc-godkendelse. Tag højde for disse afhængigheder før valget. For en godkendt privat CA-certifikatsamling kan du angive en udtrykkelig sti:
response = session.get(
"https://example.com/",
timeout=(5, 15),
verify="/path/to/approved-ca-bundle.pem",
)
Brug den faktisk godkendte samling, og lad kontrollen være aktiveret. Hold en separat Session for hver routningspolitik i stedet for at ændre én, mens andet arbejde bruger den.
Hvis ingen mulighed forklarer programmets rute, så sammenlign en isoleret Session med programmet i samme kørselsmiljø og mod samme harmløse mål. Notér tilstedeværende proxyvariabler, værdien af trust_env og om kaldet angiver proxies; hold URL’er med legitimationsoplysninger ude af delte logfiler. Succes i isolation retter næste undersøgelse mod Session-oprettelse, adaptere, forløb med forberedte forespørgsler eller egne transporter. En miljøtest med curl afgør ikke Requests’ egen fletningsadfærd.