Python urllib: kombinovanie proxy smerovania s Basic overením webu
Skonbinujte urllib smerovanie a Basic overenie cieľa v jedinom explicitnom openeri bez dvojnásobného nahradenia globálneho openera.
Volanie install_opener() dvakrát nepridá druhý opener k prvému. Nahradí predvolený opener modulu. Ak jeden objekt pozná proxy a iný prihlásenie na web, zostavte jediný opener s potrebnými handlermi.
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()Proxy a cieľ sú príklady. Pre verejnú službu dostupnú cez verejnú HTTP proxy poskytuje zoznam HTTP proxy kandidátske koncové body pre smerovací handler. Tento opener smeruje HTTPS požiadavku cez HTTP proxy a rieši Basic výzvu cieľa. Nekonfiguruje overovanie proxy.
Ak proxy tiež vyžaduje prihlásenie, zvoľte podporované usporiadanie overovania proxy osobitne. 407 pri CONNECT nastane skôr, než cieľ môže vydať vlastnú výzvu. Pridanie prihlasovacích údajov webu do správcu hesiel nemôže uspokojiť tú skoršiu výmenu.
Priame volanie opener.open() udržiava konfiguráciu pri operácii. Nie je potrebné meniť predvolenú hodnotu pre celý modul, pokiaľ aplikácia zámerne nechce, aby všetky pohodlné volania zdieľali tento opener.