install_opener() نى ئىككى قېتىم چاقىرىش ئىككىنچى opener نى بىرىنچىگە قوشمايدۇ. ئۇ module نىڭ سۈكۈتتىكى opener نى ئالماشتۇرىدۇ. ئەگەر بىر ئوبيېكت proxy نى، يەنە بىرى تور بېكەتكە كىرىشنى بىلسە، كېرەكلىك handlers نى ئۆز ئىچىگە ئالغان بىر opener قۇرۇڭ.

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 ۋە نىشان مىسال. ئاممىۋى HTTP proxy ئارقىلىق يېتىشكە بولىدىغان ئاممىۋى مۇلازىمەت ئۈچۈن HTTP proxy تىزىملىكى routing handler ئۈچۈن نامزات endpoints تەمىنلەيدۇ. بۇ opener HTTPS تەلەپنى HTTP proxy ئارقىلىق يوللايدۇ ۋە نىشاننىڭ Basic سىنىقىنى بىر تەرەپ قىلىدۇ. ئۇ proxy دەلىللەش تەڭشىمەيدۇ.

ئەگەر proxy مۇ كىرىش تەلەپ قىلسا، قوللايدىغان proxy دەلىللەش ئورۇنلاشتۇرمىسىنى ئايرىم تاللاڭ. CONNECT ۋاقتىدىكى 407 نىشان ئۆز سىنىقىنى چىقىرالمايدىغان ۋاقىتتىن بۇرۇن يۈز بېرىدۇ. تور بېكەتتىكى ئۇچۇرلارنى پارول باشقۇرغۇچقا قوشۇش ئۇ ئىلگىرىكى ئالماشتۇرۇشنى قاندۇرالمايدۇ.

opener.open() نى بىۋاسىتە چاقىرىش سەپلىمىنى مەشغۇلات بىلەن ساقلايدۇ. پروگرامما بارلىق ئاسان چاقىرىقلارنىڭ بۇ opener نى ئورتاقلىشىشىنى قەستەن خالىمىسا، module دەرىجىلىك سۈكۈتتىكىنى ئۆزگەرتىشنىڭ ھاجىتى يوق.

مۇناسىۋەتلىك ماقالىلەر