Python urllib: kombiniranje proxy usmeravanja sa Basic autentifikacijom veb-stranice
Kombinujte urllib usmeravanje i Basic autentifikaciju odredišta u jednom eksplicitnom openeru bez dvostruke zamene globalnog openera.
Pozivanje install_opener() dvaput ne dodaje drugi opener prvom. Ono zamenjuje podrazumevani opener modula. Ako jedan objekat zna proxy, a drugi prijavu na veb-stranicu, izgradite jedan opener sa 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 primeri. Za javnu uslugu dostupnu preko javnog HTTP proxyja, lista HTTP proxyja daje kandidatne endpointove za handler usmeravanja. Ovaj opener usmerava HTTPS zahtev kroz HTTP proxy i rešava Basic izazov odredišta. Ne konfiguriše autentifikaciju proxyja.
Ako i proxy zahteva prijavu, odaberite podržani raspored autentifikacije proxyja odvojeno. 407 pri CONNECT-u nastaje pre nego odredište može izdati sopstveni izazov. Dodavanje akreditiva veb-stranice u upravitelj lozinki ne može zadovoljiti tu raniju razmenu.
Direktno pozivanje opener.open() zadržava konfiguraciju uz operaciju. Nema potrebe menjati podrazumevano na nivou modula osim ako aplikacija namerno želi da svi praktični pozivi dele ovaj opener.