Funktsiooni install_opener() kaks korda kutsumine ei lisa teist opener-it esimesele. See asendab mooduli vaikimisi opener-i. Kui üks objekt teab proxy-t ja teine veebisaidi sisselogimist, koostage üks opener vajalike handler-itega.

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 ja sihtkoht on näited. Avaliku teenuse jaoks, millele pääseb avaliku HTTP-proxy kaudu, pakub HTTP-proxy loend marsruutimishandler-ile kandidaat-lõpp-punkte. See opener suunab HTTPS-päringu HTTP-proxy kaudu ja käsitleb sihtkoha Basic-väljakutset. See ei sea proxy autentimist.

Kui ka proxy nõuab sisselogimist, valige toetatud proxy-autentimise kord eraldi. 407 CONNECT-i ajal tekib enne, kui sihtkoht saab oma väljakutse esitada. Veebisaidi identimisteabe lisamine paroolihaldurisse ei saa seda varasemat vahetust rahuldada.

Funktsiooni opener.open() otse kutsumine hoiab konfiguratsiooni toimingu juures. Mooduliülest vaikeväärtust pole vaja muuta, kui rakendus ei taha teadlikult, et kõik mugavad kutsed jagaksid seda opener-it.

Seotud artiklid