Om install_opener() twee keer te roep voeg nie die tweede opener by die eerste nie. Dit vervang die module se verstek-opener. As een objek die proxy ken en 'n ander die webwerf-aanmelding, bou 'n enkele opener met die vereiste 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()

Die proxy en bestemming is voorbeelde. Vir 'n publieke diens wat deur 'n publieke HTTP-proxy bereik kan word, bied die HTTP-proxylys kandidaat-eindpunte vir die roeteringshandler. Hierdie opener stuur die HTTPS-versoek deur die HTTP-proxy en hanteer die bestemming se Basic-uitdaging. Dit konfigureer nie proxy-verifikasie nie.

As die proxy ook 'n aanmelding vereis, kies afsonderlik 'n ondersteunde proxy-verifikasie-reëling. 'n 407 by CONNECT-tyd vind plaas voordat die bestemming sy eie uitdaging kan stuur. Om webwerf-credentials by die wagwoordbestuurder te voeg, kan nie daardie vroeëre uitruiling bevredig nie.

Om opener.open() direk te roep hou die konfigurasie by die operasie. Daar is geen nodigheid om die modulewye verstek te verander nie, tensy die toepassing doelbewus wil hê alle geriefsoproepe moet hierdie opener deel.

Verwante artikels