ការហៅ install_opener() ពីរដងមិនបន្ថែម opener ទីពីរទៅទីមួយទេ។ វាជំនួស opener លំនាំដើមរបស់ module។ ប្រសិនបើវត្ថុមួយដឹងពី proxy ហើយមួយទៀតដឹងពីការចូលគេហទំព័រ សូមបង្កើត opener តែមួយដែលមាន handlers ចាំបាច់។

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 សាធារណៈ បញ្ជី proxy HTTP ផ្តល់ endpoints បេក្ខជនសម្រាប់ handler នៃការបញ្ជូន។ Opener នេះបញ្ជូនសំណើ HTTPS តាមរយៈ HTTP proxy ហើយដោះស្រាយការប្រកួត Basic របស់គោលដៅ។ វាមិនកំណត់ការផ្ទៀងផ្ទាត់ proxy ទេ។

ប្រសិនបើ proxy ក៏ត្រូវការការចូលដែរ សូមជ្រើសរើសការរៀបចំផ្ទៀងផ្ទាត់ proxy ដែលគាំទ្រដោយឡែក។ 407 នៅពេល CONNECT កើតឡើងមុនពេលគោលដៅអាចចេញការប្រកួតផ្ទាល់ខ្លួន។ ការបន្ថែមព័ត៌មានសម្គាល់គេហទំព័រទៅកាន់កម្មវិធីគ្រប់គ្រងពាក្យសម្ងាត់មិនអាចបំពេញការផ្លាស់ប្តូរមុននោះបានទេ។

ការហៅ opener.open() ដោយផ្ទាល់រក្សា ការកំណត់ជាមួយប្រតិបត្តិការ។ មិនចាំបាច់ផ្លាស់ប្តូរលំនាំដើមទូទាំង module ទេ លុះត្រាតែកម្មវិធីចង់ដោយចេតនាឱ្យការហៅងាយស្រួលទាំងអស់ចែករំលែក opener នេះ។

អត្ថបទពាក់ព័ន្ធ