install_opener() iki dəfə çağırmaq ikinci opener-i birinciyə əlavə etmir. O, modulun default opener-ini əvəz edir. Əgər bir obyekt proksini, digəri sayt girişini bilirsə, tələb olunan handler-ləri olan tək opener qurun.

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

Proksi və hədəf nümunədir. Ümumi HTTP proksisi ilə əldə edilə bilən ümumi xidmət üçün HTTP proksi siyahısı marşrutlama handler-i üçün namizəd endpoint-lər verir. Bu opener HTTPS sorğusunu HTTP proksisindən keçirir və hədəfin Basic çağırışını həll edir. O, proksi autentifikasiyasını konfiqurasiya etmir.

Proksi də giriş tələb edirsə, dəstəklənən proksi-autentifikasiya qaydasını ayrıca seçin. CONNECT zamanı 407 hədəf öz çağırışını verə bilməzdən əvvəl baş verir. Sayt kredensiallarını parol menecerinə əlavə etmək o erkən mübadiləni təmin edə bilməz.

opener.open() birbaşa çağırmaq konfiqurasiyanı əməliyyatla saxlayır. Tətbiq bütün rahat çağırışların bu opener-i paylaşmasını qəsdən istəmirsə, modul səviyyəsində default-u dəyişməyə ehtiyac yoxdur.

Əlaqəli məqalələr