install_opener() ሁለት ጊዜ መጥራት ሁለተኛውን opener ወደ መጀመሪያው አይጨምርም። የሞዱሉን ነባሪ opener ይተካል። አንድ ነገር ፕሮክሲውን እና ሌላው የድረ-ገጹን መግቢያ የሚያውቅ ከሆነ፣ አስፈላጊዎቹን 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()

ፕሮክሲው እና መዳረሻው ምሳሌዎች ናቸው። በይፋዊ HTTP ፕሮክሲ ሊደረስበት ለሚችል ይፋዊ አገልግሎት፣ የHTTP ፕሮክሲ ዝርዝር ለአቅጣጫው handler እጩ የመጨረሻ ነጥቦችን ይሰጣል። ይህ opener የHTTPS ጥያቄውን በHTTP ፕሮክሲ በኩል ያስተላልፋል እና የመዳረሻውን Basic ተግዳሮት ይመልሳል። የፕሮክሲ ማረጋገጫን አያዋቅርም።

ፕሮክሲውም መግቢያ የሚፈልግ ከሆነ፣ የሚደገፍ የፕሮክሲ ማረጋገጫ አደረጃጀት ለብቻው ይምረጡ። በCONNECT ጊዜ 407 መዳረሻው የራሱን ተግዳሮት ከማውጣቱ በፊት ይከሰታል። የድረ-ገጽ መረጃዎችን ወደ የይለፍ ቃል አስተዳዳሪ መጨመር ያንን ቀደም ያለ ልውውጥ ማሟላት አይችልም።

opener.open() በቀጥታ መጥራት ውቅሩን ከሥራው ጋር ያቆያል። መተግበሪያው በሆን በሆነ መንገድ ሁሉም ምቹ ጥሪዎች ይህን opener እንዲጋሩ ካልፈለገ በስተቀር፣ በሞዱል ደረጃ ያለውን ነባሪ መቀየር አያስፈልግም።

ተዛማጅ ጽሑፎች