Session-proxyer i Python Requests och miljöns företräde
Gör routningen i Python Requests förutsägbar när session.proxies, miljövariabler, begäransinställningar och trust_env samverkar.
Om session.proxies pekar på en ändpunkt men skriptet använder skalets proxy löser en ny tilldelning av samma uppslagstabell inte konflikten. Requests kan slå samman miljöns proxyinställningar med företräde framför Sessions standardvärden. Välj om Session ska fortsätta upptäcka inställningar i miljön.
Behåll miljöupptäckt och ange vägar i begäran
Skicka uttryckliga värden till det enskilda anropet, som Requests rekommenderar för att undvika konflikten mellan Session och 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()
Byt ut den lokala lyssnaren mot din egen. Jämför du publika HTTP-ändpunkter, välj kandidater från listan över HTTP-proxyer och håll Session-policyn oförändrad. Detta styr de angivna mappningsposterna; gör ett medvetet val även för andra scheman eller värdar som programmet använder. En tjänst, IDE, container eller CI-körare kan ärva en annan miljö än terminalen.
Låt Session styra sina egna inställningar
Om programmet inte ska upptäcka proxyer från miljön, sätt policyn före den första begäran:
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åverkar också miljörelaterad certifikatkonfiguration och automatisk netrc-autentisering. Beakta dessa beroenden innan du väljer det. För ett godkänt privat CA-certifikatpaket kan du ange en uttrycklig sökväg:
response = session.get(
"https://example.com/",
timeout=(5, 15),
verify="/path/to/approved-ca-bundle.pem",
)
Använd det faktiskt godkända paketet och låt verifieringen vara aktiv. Ha en separat Session för varje routningspolicy i stället för att ändra en medan annat arbete använder den.
Om inget alternativ förklarar programmets väg, jämför en isolerad Session med programmet i samma körmiljö och mot samma ofarliga mål. Notera vilka proxyvariabler som finns, värdet på trust_env och om anropet anger proxies; håll URL:er med inloggningsuppgifter borta från delade loggar. Framgång i isolering styr nästa granskning mot Session-skapande, adaptrar, flöden för förberedda begäranden eller egna transporter. Ett miljötest med curl avgör inte Requests eget sammanslagningsbeteende.