Python urllib: Basic-Proxy-Authentifizierung für HTTP-Anfragen
Erstellen Sie einen expliziten urllib-Opener für eine Basic-Herausforderung eines HTTP-Proxys und unterscheiden Sie diesen gewöhnlichen HTTP-Austausch von der HTTPS-CONNECT-Authentifizierung.
Für eine Basic-Herausforderung eines HTTP-Proxys verwenden Sie ProxyBasicAuthHandler. Dieses gewöhnliche HTTP-Beispiel hält Route und Konto in einem Opener:
import os
from urllib.request import (
ProxyHandler, ProxyBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener,
)
proxy_url = 'http://proxy.example:8080'
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(
None, proxy_url,
os.environ['PROXY_USER'], os.environ['PROXY_PASSWORD'],
)
opener = build_opener(
ProxyHandler({'http': proxy_url}),
ProxyBasicAuthHandler(passwords),
)
with opener.open('http://example.com/', timeout=10) as response:
print(response.status)Verwenden Sie den echten Endpunkt und das vom Betreiber bereitgestellte Konto. Der Handler nutzt den Passwort-Manager für die Herausforderung des Proxys; stimmen Sie die vorgesehene Proxy-URI und Realm ab. Die Basic-Authentifizierung am Ziel verwendet einen anderen Handler.
Der direkte Aufruf des Openers hält diese Einrichtung lokal. Die Anforderungs-URL bleibt die Website, nicht der Vermittler. Diese unverschlüsselte HTTP-Route verschlüsselt keinen Basic-Austausch.
Leiten Sie aus diesem Beispiel keine HTTPS-Tunnelunterstützung ab. Ein 407 während CONNECT tritt beim Aufbau auf, vor einer gewöhnlichen Antwort des Ziels; die gewählte Integration muss die Authentifizierung dort behandeln. Ein Wechsel des Login-Handlers der Website kann diese frühere Herausforderung nicht beheben.
Proxy-URLs mit Anmeldedaten sind ein anderes Format, das in älteren Beispielen vorkommt. Wenn Sie es verwenden, kodieren Sie URL-Trennzeichen korrekt und halten Sie die entstehende geheime URL aus Protokollen heraus.