install_opener() ကို နှစ်ကြိမ်ခေါ်ခြင်းသည် ဒုတိယ opener ကို ပထမတစ်ခုတွင် မထည့်ပါ။ ၎င်းသည် module ၏ default 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 တစ်ခုလုံး၏ default ကို ပြောင်းရန် မလိုအပ်ပါ။

ဆက်စပ်ဆောင်းပါးများ