Python urllib: kombinere proxy-ruting med Basic Authentication på nettstedet
Kombiner urllib-ruting og Basic-autentisering av destinasjonen i én eksplisitt opener uten å erstatte den globale openeren to ganger.
Å kalle install_opener() to ganger legger ikke den andre openeren til den første. Det erstatter modulens standard-opener. Hvis ett objekt kjenner proxyen og et annet kjenner innloggingen på nettstedet, bygg én opener med de nødvendige handlerne.
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()Proxyen og destinasjonen er eksempler. For en offentlig tjeneste som kan nås via en offentlig HTTP-proxy, gir HTTP-proxy-listen kandidat-endepunkter for ruting-handleren. Denne openeren ruter HTTPS-forespørselen gjennom HTTP-proxyen og håndterer destinasjonens Basic-utfordring. Den konfigurerer ikke proxy-autentisering.
Hvis proxyen også krever innlogging, velg en støttet proxy-autentiseringsordning separat. En 407 ved CONNECT oppstår før destinasjonen kan utstede sin egen utfordring. Å legge nettstedets påloggingsinformasjon til passordbehandleren kan ikke oppfylle den tidligere utvekslingen.
Å kalle opener.open() direkte beholder konfigurasjonen sammen med operasjonen. Det er ikke nødvendig å endre standarden for hele modulen med mindre applikasjonen bevisst vil at alle bekvemmelighetskall skal dele denne openeren.