Python urllib: Proxy-Routing mat Basic-Authentifikatioun vun der Websäit kombinéieren
Kombinéiert urllib-Routing an d'Basic-Authentifikatioun vum Zil an engem eenzegen expliziten Opener, ouni den globale Opener zweemol z'ersetzen.
Fir install_opener() zweemol ze ruffen, gëtt den zweete Opener net beim éischten derbäi. Et ersetzt den Standard-Opener vum Modul. Wann een Objet de Proxy kennt an en aneren de Login vun der Websäit, baut een eenzegen Opener mat de noutwennegen Handlers.
import os
from urllib.request import (ProxyHandler, HTTPBasicAuthHandler,
HTTPPasswordMgrWithDefaultRealm, build_opener)
passwords = HTTPPasswordMgrWithDefaultRealm()
passwords.add_password(None, 'https://example.com/private/',
os.environ['SITE_USER'], os.environ['SITE_PASSWORD'])
opener = build_opener(
ProxyHandler({'https': 'http://203.0.113.10:8080'}),
HTTPBasicAuthHandler(passwords),
)
with opener.open('https://example.com/private/report', timeout=10) as response:
body = response.read()De Proxy an den Zil sinn Beispiller. Fir eëffentleche Service, deen iwwer en eëffentlechen HTTP-Proxy erreechbar ass, bitt d'HTTP-Proxy-Lëscht Kandidat-Endpunkte fir den Routing-Handler. Dësen Opener leet d'HTTPS-Ufro iwwer den HTTP-Proxy an behandelt d'Basic-Herausfuerderung vum Zil. Hien konfiguréiert keng Proxy-Authentifikatioun.
Wann de Proxy och e Login verlaangt, wielt eng ënnerstëtzten Proxy-Authentifikatiounsastellung separat. En 407 beim CONNECT geschitt, ier den Zil seng eegen Herausfuerderung ka verschécken. D'Websäit-Identitéitsdaten an de Passwuertmanager dobäizesetzen kann dee fréieren Austausch net erfëllen.
Fir opener.open() direkt ze ruffen, bleift d'Konfiguratioun bei der Operatioun. Et muss net de modulwäiten Standard geännert ginn, ausser d'Applikatioun wëll bewosst, datt all bequem Opruffer dësen Opener deelen.