Der Büro-Proxy verlangt ein Konto. Die Website dahinter verlangt ein anderes. Requests hat für diese beiden Basic-Logins getrennte Eingaben: Zugangsdaten in der Proxy-URL und das auth-Argument der Anfrage.

from urllib.parse import quote
import requests

proxy_url = (
    f"http://{quote(proxy_user, safe='')}:"
    f"{quote(proxy_password, safe='')}@proxy.example:8080"
)
response = requests.get(
    "https://reports.example/private/",
    proxies={"https": proxy_url},
    auth=(site_user, site_password),
    timeout=(5, 20),
)
response.raise_for_status()

Die vier Kontovariablen stammen aus der Zugangsdaten-Konfiguration der Anwendung. Benutzername und Passwort des Proxys getrennt zu kodieren erhält Zeichen wie das At-Zeichen, ohne sie in URL-Trennzeichen zu verwandeln.

Der Schlüssel https im Wörterbuch wählt diesen Weg für ein HTTPS-Ziel. Sein Wert beginnt weiterhin mit http://, weil das das Protokoll ist, mit dem dieser Beispiel-Proxy erreicht wird.

Bei dieser HTTPS-Anfrage gehört das Proxy-Login zum CONNECT-Austausch. Das Website-Login gehört zur späteren Anfrage durch den aufgebauten Tunnel. Wenn der Adapter die Proxy-Autorisierung aus seiner eigenen URL ableitet, bleibt sie am betreffenden Hop; für diesen Basic-Fall ist keine kombinierte Authentifizierungsklasse nötig.

Ein 407 kennzeichnet die Aufforderung des Vermittlers. Ein 401 von der Website kennzeichnet die Aufforderung des Ziels. Nutze diese Antwort, um zu entscheiden, welches der beiden konfigurierten Konten Aufmerksamkeit braucht.

Ähnliche Artikel