Python urllib: kombinér proxy-routing med Basic Authentication på webstedet
Kombinér urllib-routing og Basic-godkendelse af destinationen i én eksplicit opener uden at erstatte den globale opener to gange.
At kalde install_opener() to gange føjer ikke den anden opener til den første. Det erstatter modulets standard-opener. Hvis ét objekt kender proxien og et andet kender webstedets login, byg én opener med de nødvendige 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()Proxien og destinationen er eksempler. Til en offentlig tjeneste, der kan nås via en offentlig HTTP-proxy, giver HTTP-proxy-listen kandidat-endpoints til routing-handleren. Denne opener sender HTTPS-anmodningen gennem HTTP-proxien og håndterer destinationens Basic-udfordring. Den konfigurerer ikke proxy-godkendelse.
Hvis proxien også kræver login, vælg en understøttet proxy-godkendelsesordning separat. En 407 ved CONNECT opstår, før destinationen kan udstede sin egen udfordring. At tilføje webstedets legitimationsoplysninger til password-manageren kan ikke opfylde den tidligere udveksling.
At kalde opener.open() direkte holder konfigurationen sammen med handlingen. Der er ingen grund til at ændre standarden for hele modulet, medmindre applikationen bevidst vil have alle bekvemmelighedskald til at dele denne opener.