Python urllib: kombinace proxy směrování s Basic ověřením webu
Zkombinujte urllib směrování a Basic ověření cíle v jediném explicitním openeru, aniž byste dvakrát nahradili globální opener.
Volání install_opener() dvakrát nepřidá druhý opener k prvnímu. Nahradí výchozí opener modulu. Pokud jeden objekt zná proxy a jiný přihlášení na web, sestavte jediný opener s potřebnými handlery.
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 a cíl jsou příklady. Pro veřejnou službu dostupnou přes veřejnou HTTP proxy poskytuje seznam HTTP proxy kandidátní koncové body pro směrovací handler. Tento opener směruje HTTPS požadavek přes HTTP proxy a řeší Basic výzvu cíle. Nekonfiguruje ověřování proxy.
Pokud proxy také vyžaduje přihlášení, zvolte podporované uspořádání ověřování proxy zvlášť. 407 při CONNECT nastane dříve, než cíl může vydat vlastní výzvu. Přidání přihlašovacích údajů webu do správce hesel nemůže uspokojit tuto dřívější výměnu.
Přímé volání opener.open() udržuje konfiguraci u operace. Není třeba měnit výchozí hodnotu pro celý modul, pokud aplikace záměrně nechce, aby všechny pohodlné volání sdílely tento opener.