Að kalla á install_opener() tvisvar bætir ekki seinni openerinum við þann fyrri. Það kemur í stað sjálfgefins openers einingarinnar. Ef einn hlutur þekkir proxyið og annar þekkir innskráningu vefsins, byggðu einn opener með nauðsynlegum 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()

Proxyið og áfangastaðurinn eru dæmi. Fyrir opinbera þjónustu sem er aðgengileg í gegnum opinbert HTTP-proxy, veitir HTTP-proxylistinn mögulega endapunkta fyrir routing-handlerinn. Þessi opener beinir HTTPS-beiðninni í gegnum HTTP-proxyið og sinnir Basic-áskorun áfangastaðarins. Hann stillir ekki proxy-auðkenningu.

Ef proxyið krefst líka innskráningar, veldu studda proxy-auðkenningu sérstaklega. 407 við CONNECT á sér stað áður en áfangastaðurinn getur gefið út sína eigin áskorun. Að bæta vefskírteinum við lykilorðastjórann getur ekki fullnægt þeim fyrri skiptum.

Að kalla beint á opener.open() heldur stillingunni með aðgerðinni. Ekki þarf að breyta sjálfgefnu gildi einingarinnar nema forritið vilji viljandi að allar þægilegar kalls deili þessum opener.

Tengdir greinar