Klic install_opener() dvakrat ne doda drugega openerja prvemu. Zamenja privzeti opener modula. Če en objekt pozna proxy, drugi pa prijavo na spletno mesto, zgradite en opener s potrebnimi handlerji.

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 in cilj so primeri. Za javno storitev, dostopno prek javnega HTTP proxyja, seznam HTTP proxyjev ponuja kandidatne končne točke za handler usmerjanja. Ta opener usmeri zahtevo HTTPS skozi HTTP proxy in obdela Basic izziv cilja. Ne konfigurira preverjanja pristnosti proxyja.

Če tudi proxy zahteva prijavo, izberite podprto ureditev preverjanja pristnosti proxyja ločeno. 407 ob CONNECT se pojavi, preden lahko cilj izda svoj izziv. Dodajanje poverilnic spletnega mesta v upravitelj gesel ne more zadovoljiti te zgodnejše izmenjave.

Neposreden klic opener.open() ohrani konfiguracijo skupaj z operacijo. Privzete vrednosti na ravni modula ni treba spreminjati, razen če aplikacija namerno želi, da si vsi priročni klici delijo ta opener.

Sorodni članki