Verwenden Sie proxy=, wenn ein Endpunkt die Anfragen des Clients bearbeiten soll. Verwenden Sie mounts=, wenn Zielschemata unterschiedliche Routen benötigen. Die Beispiele nutzen diese HTTPX-Schnittstellen; Projekte mit der älteren API proxies= brauchen eine zur Version passende Konfiguration.

Ein Endpunkt

import httpx

timeout = httpx.Timeout(15.0, connect=5.0)

with httpx.Client(
    proxy="http://127.0.0.1:8080",
    trust_env=False,
    timeout=timeout,
) as client:
    response = client.get("https://example.com/")
    response.raise_for_status()
    print(response.status_code)

Ersetzen Sie den lokalen Listener durch einen laufenden HTTP-Proxy. Auch ein Kandidat aus der HTTP-Proxy-Liste muss mit Ihrem Ziel getestet werden. Ein HTTPS-Ziel kann diesen http://-Endpunkt per CONNECT verwenden. Das Schema auf https:// zu ändern fordert stattdessen TLS zum Proxy selbst an; Listener und Client müssen das unterstützen.

Routen nach Zielschema trennen

import httpx

mounts = {
    "http://": httpx.HTTPTransport(
        proxy="http://127.0.0.1:8080",
        trust_env=False,
    ),
    "https://": httpx.HTTPTransport(
        proxy="http://127.0.0.1:8081",
        trust_env=False,
    ),
}

with httpx.Client(
    mounts=mounts,
    trust_env=False,
    timeout=httpx.Timeout(15.0, connect=5.0),
) as client:
    response = client.get("https://example.com/")
    response.raise_for_status()
    print(response.status_code)

Mount-Schlüssel passen auf Ziel-URLs. HTTP-Ziele wählen hier Port 8080, HTTPS-Ziele Port 8081. Der Proxywert beschreibt das eigene Protokoll des Listeners. Deshalb kann der HTTPS-Mount korrekt einen http://-Proxy enthalten. Setzen Sie Ihre Endpunkte ein und prüfen Sie beide Zielschemata.

Beide Varianten setzen trust_env=False am Client und, wo angegeben, an den Transporten. Sonst liest HTTPX standardmäßig Proxy- und Zertifikatsumgebungsvariablen. Ist Ihre Bereitstellung darauf angewiesen, lassen Sie die Erkennung aktiv oder konfigurieren Sie Routen und Vertrauen ausdrücklich. Für privates Vertrauen verwenden Sie TLS-Kontext und CA-Konfiguration Ihrer HTTPX-Version; die Zielprüfung bleibt aktiv. HTTPS-Proxyvertrauen kann vom Zielvertrauen getrennt sein.

httpx.Timeout(15.0, connect=5.0) überschreibt das Verbindungstimeout und versorgt die anderen konfigurierten Timeoutkomponenten mit dem Standardwert. Lesen, Schreiben und Poolwarten haben getrennte Grenzen; fünfzehn Sekunden sind kein Gesamtlimit für die verstrichene Zeit. Ein Pooltimeout kann bedeuten, dass andere Arbeit verfügbare Verbindungen belegt. Schließen Sie Clients und Streamingantworten korrekt, bevor Sie darin einen Beleg für einen unerreichbaren Proxy sehen.

Ähnliche Artikel