Python Requests: Session-Proxys und Vorrang der Umgebung
Machen Sie das Routing von Python Requests nachvollziehbar, wenn session.proxies, Umgebungsvariablen, einzelne Anfragen und trust_env zusammenwirken.
Wenn session.proxies auf einen Endpunkt zeigt, das Skript aber den Proxy der Shell verwendet, löst die erneute Zuweisung desselben Dictionarys den Konflikt nicht. Requests kann Umgebungseinstellungen für Proxys über Session-Standardwerte legen. Entscheiden Sie, ob die Session weiterhin Einstellungen aus der Umgebung ermitteln soll.
Umgebungsermittlung beibehalten, Routen pro Anfrage angeben
Übergeben Sie explizite Werte an den einzelnen Aufruf, wie Requests zur Vermeidung dieses Konflikts zwischen Session und Umgebung empfiehlt:
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()
Ersetzen Sie den lokalen Listener durch Ihren eigenen. Wenn Sie öffentliche HTTP-Endpunkte vergleichen, wählen Sie Kandidaten aus der HTTP-Proxy-Liste und lassen die Session-Richtlinie unverändert. Dies steuert die übergebenen Zuordnungseinträge; entscheiden Sie bewusst auch über andere Schemas oder Hosts der Anwendung. Ein Dienst, eine IDE, ein Container oder ein CI-Runner kann eine andere Umgebung als Ihr Terminal erben.
Die Session ihre Einstellungen selbst bestimmen lassen
Wenn die Anwendung keine Proxys aus der Umgebung ermitteln soll, setzen Sie die Richtlinie vor der ersten Anfrage:
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 beeinflusst auch umgebungsbezogene Zertifikatskonfiguration und automatische netrc-Authentifizierung. Berücksichtigen Sie diese Abhängigkeiten vor der Wahl. Für ein freigegebenes privates CA-Bundle können Sie einen expliziten Pfad übergeben:
response = session.get(
"https://example.com/",
timeout=(5, 15),
verify="/path/to/approved-ca-bundle.pem",
)
Verwenden Sie das tatsächlich freigegebene Bundle und lassen Sie die Prüfung eingeschaltet. Verwenden Sie pro Routing-Richtlinie eine eigene Session, statt eine Session zu verändern, während andere Aufgaben sie nutzen.
Erklärt keine der Alternativen die Route der Anwendung, vergleichen Sie eine isolierte Session mit der Anwendung in derselben Laufzeitumgebung und am selben unbedenklichen Ziel. Notieren Sie vorhandene Proxyvariablen, den Wert von trust_env und ob der Aufruf proxies übergibt; halten Sie URLs mit Zugangsdaten aus geteilten Logs heraus. Funktioniert die isolierte Session, untersuchen Sie als Nächstes Session-Erstellung, Adapter, Abläufe mit vorbereiteten Anfragen oder eigene Transporte. Ein curl-Umgebungstest klärt nicht das Zusammenführungsverhalten von Requests selbst.