A install_opener() kétszeri meghívása nem adja hozzá a második openert az elsőhöz. Lelcseréli a modul alapértelmezett openerét. Ha az egyik objektum ismeri a proxyt, a másik pedig a webhely bejelentkezését, építsen egyetlen openert a szükséges handlerekkel.

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()

A proxy és a cél példák. Egy nyilvános HTTP-proxyn elérhető nyilvános szolgáltatáshoz az HTTP-proxy lista jelölt végpontokat kínál az útválasztó handlernek. Ez az opener az HTTPS-kérést a HTTP-proxyn keresztül továbbítja, és kezeli a cél Basic-kihívását. Nem konfigurál proxy-hitelesítést.

Ha a proxy is bejelentkezést kér, válasszon külön támogatott proxy-hitelesítési megoldást. A 407 a CONNECT idején azelőtt történik, hogy a cél kiadhatná a saját kihívását. A webhely hitelesítő adatainak hozzáadása a jelszókezelőhöz nem elégítheti ki azt a korábbi cserét.

A opener.open() közvetlen hívása a konfigurációt a művelet mellett tartja. Nem kell módosítani a modul szintű alapértelmezést, kivéve ha az alkalmazás szándékosan azt akarja, hogy minden kényelmi hívás ezt az openert használja.

Kapcsolódó cikkek