Übergeben Sie ProxyHandler eine leere Zuordnung, wenn ein einzelner urllib-Opener direkt verbinden soll:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))

with direct.open("https://example.com/", timeout=10) as response:
    print(response.status)

Das leere Dictionary liefert keine Proxyrouten. Wird die Zuordnung weggelassen, ermittelt der Handler stattdessen Proxys aus seiner Umgebung und den Plattformeinstellungen. Diese beiden Konstruktionen stehen für unterschiedliche Richtlinien.

Das Beispiel verwendet die Python-Standardbibliothek und behält die normale HTTPS-Prüfung bei. Der with-Block schließt die Antwort, auch wenn er wegen einer Ausnahme verlassen wird.

Direkte und über Proxy geleitete Anfragen in derselben Anwendung

Zwei Opener können die beiden Richtlinien tragen, ohne zwischen Aufrufen Umgebungsvariablen zu ändern:

from urllib.request import ProxyHandler, build_opener

direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}))

with proxied.open("https://example.com/", timeout=10) as response:
    print(response.status)

Ersetzen Sie die Loopback-Adresse durch Ihren HTTP-Proxy oder wählen Sie für den Proxyvergleich einen Kandidaten aus der HTTP-Proxy-Liste. Er kann die Verbindung zum HTTPS-Ziel über CONNECT transportieren, sofern der Dienst dies erlaubt. Protokoll und Authentifizierungsunterstützung des Listeners müssen zum Handler passen.

Den Standard-Opener unangetastet lassen

Rufen Sie direct.open oder proxied.open über das Objekt auf, das für den jeweiligen Weg zuständig ist. install_opener ändert den prozessweiten Standard für die Komfortaufrufe von urllib; eine Bibliothek kann damit unbeteiligten Code beeinflussen. Für den isolierten Opener oben ist es unnötig.

Das Argument timeout ist eine Einstellung für eine Operation, keine vollständige Echtzeitfrist für jede Übertragung. Lesen Sie nur die benötigten Daten und verwenden Sie eine übergeordnete Frist, wenn die Aufgabe ein strenges Gesamtzeitbudget hat.

Diese Opener-Objekte ändern weder den Client einer anderen Bibliothek noch einen bestehenden Prozess oder die Proxyeinstellungen eines Browsers.

Ähnliche Artikel