Python urllib: kombiniranje proxy usmjeravanja s Basic autentifikacijom web-mjesta
Kombinirajte urllib usmjeravanje i Basic autentifikaciju odredišta u jednom eksplicitnom openeru bez dvostruke zamjene globalnog openera.
Pozivanje install_opener() dvaput ne dodaje drugi opener prvome. Ono zamjenjuje zadani opener modula. Ako jedan objekt poznaje proxy, a drugi prijavu na web-mjesto, izgradite jedan opener s potrebnim handlerima.
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 i odredište su primjeri. Za javnu uslugu dostupnu preko javnog HTTP proxyja, popis HTTP proxyja daje kandidatne endpointove za handler usmjeravanja. Ovaj opener usmjerava HTTPS zahtjev kroz HTTP proxy i rješava Basic izazov odredišta. Ne konfigurira autentifikaciju proxyja.
Ako i proxy zahtijeva prijavu, odaberite podržani način autentifikacije proxyja zasebno. 407 pri CONNECT-u nastaje prije nego odredište može izdati vlastiti izazov. Dodavanje vjerodajnica web-mjesta u upravitelj lozinkama ne može zadovoljiti tu raniju razmjenu.
Izravno pozivanje opener.open() zadržava konfiguraciju uz operaciju. Nema potrebe mijenjati zadano na razini modula osim ako aplikacija namjerno želi da svi praktični pozivi dijele ovaj opener.