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 പട്ടിക റൂട്ടിംഗ് handler-ന് സ്ഥാനാർത്ഥി endpoints നൽകുന്നു. ഈ opener HTTPS അഭ്യർത്ഥന HTTP proxy വഴി അയയ്ക്കുന്നു, ലക്ഷ്യത്തിന്റെ Basic ചലഞ്ച് കൈകാര്യം ചെയ്യുന്നു. ഇത് proxy പ്രാമാണീകരണം കോൺഫിഗർ ചെയ്യുന്നില്ല.

proxy-യ്ക്കും ലോഗിൻ ആവശ്യമെങ്കിൽ, പിന്തുണയ്ക്കുന്ന proxy-പ്രാമാണീകരണ ക്രമം വെവ്വേറെ തിരഞ്ഞെടുക്കുക. CONNECT സമയത്ത് 407 ലക്ഷ്യത്തിന് സ്വന്തം ചലഞ്ച് നൽകാൻ കഴിയുന്നതിന് മുമ്പ് സംഭവിക്കുന്നു. പാസ്‌വേഡ് മാനേജറിൽ വെബ്സൈറ്റ് ക്രെഡൻഷ്യലുകൾ ചേർക്കുന്നത് ആ മുൻകാല കൈമാറ്റം തൃപ്തിപ്പെടുത്താൻ കഴിയില്ല.

opener.open() നേരിട്ട് വിളിക്കുന്നത് കോൺഫിഗറേഷൻ പ്രവർത്തനത്തോടൊപ്പം നിലനിർത്തുന്നു. ആപ്ലിക്കേഷൻ എല്ലാ സൗകര്യ കോളുകളും ഈ opener പങ്കിടണമെന്ന് ബോധപൂർവ്വം ആഗ്രഹിക്കുന്നില്ലെങ്കിൽ, module-വ്യാപക ഡിഫോൾട്ട് മാറ്റേണ്ടതില്ല.

അനുബന്ധ ലേഖനങ്ങൾ