Li ssejjaħ install_opener() darbtejn ma jżidix it-tieni opener mal-ewwel wieħed. Dan jissostitwixxi l-opener default tal-module. Jekk oġġett wieħed jaf il-proxy u ieħor jaf id-dħul fil-website, ibni opener wieħed bl-handlers meħtieġa.

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

Il-proxy u d-destinazzjoni huma eżempji. Għal servizz pubbliku li jista' jintlaħaq permezz ta' proxy HTTP pubbliku, il-lista tal-proxy HTTP tipprovdi endpoints kandidati għall-handler tar-routing. Dan l-opener jgħaddi t-talba HTTPS mill-proxy HTTP u jimmaniġġja l-isfida Basic tad-destinazzjoni. Ma jikkonfigurax l-awtentikazzjoni tal-proxy.

Jekk il-proxy wkoll jeħtieġ dħul, agħżel b'mod separat arranġament ta' awtentikazzjoni tal-proxy appoġġjat. 407 fil-ħin tal-CONNECT iseħħ qabel id-destinazzjoni tkun tista' toħroġ l-isfida tagħha. Iż-żieda tal-kredenzjali tal-website mal-maniġer tal-passwords ma tistax tissodisfa dak l-iskambju preċedenti.

Is-sejħa diretta ta' opener.open() iżżomm il-konfigurazzjoni mal-operazzjoni. M'hemmx għalfejn tinbidel il-default tal-module kollu kemm hu, sakemm l-applikazzjoni ma tridx b'mod deliberat li s-sejħiet kollha konvenjenti jaqsmu dan l-opener.

Artikli relatati