Python urllib: opener တစ်ခုအတွက် ပရောက်စီပိတ်ခြင်း
အခြား client များနှင့် process environment ကို မပြောင်းဘဲ ProxyHandler({}) ဖြင့် တိုက်ရိုက်ချိတ်ဆက်သည့် urllib opener တည်ဆောက်ပါ။
urllib opener တစ်ခု တိုက်ရိုက်ချိတ်ဆက်ရမည်ဆိုလျှင် ProxyHandler ထံ ဗလာ mapping ပေးပါ—
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
ဗလာ dictionary သည် ပရောက်စီလမ်းကြောင်း တစ်ခုမျှ မပေးပါ။ mapping ကို မပေးဘဲထားလျှင် handler က environment နှင့် platform setting များမှ ပရောက်စီကို ရှာဖွေမည်ဖြစ်သည်။ ဤတည်ဆောက်ပုံနှစ်မျိုးသည် မတူညီသော မူဝါဒများကို ဖော်ပြသည်။
နမူနာသည် Python standard library ကို သုံးပြီး ပုံမှန် HTTPS စစ်ဆေးခြင်းကို ထိန်းသိမ်းထားသည်။ with block က response ကို ပိတ်ပေးသည်။ exception ကြောင့် block မှ ထွက်သွားသည့်အခါလည်း ပိတ်ပေးသည်။
အက်ပ်တစ်ခုတည်းတွင် တိုက်ရိုက်နှင့် ပရောက်စီမှတစ်ဆင့် request များ
ခေါ်ဆိုမှုများအကြား environment variable များ မပြောင်းဘဲ opener နှစ်ခုက မူဝါဒနှစ်ခုကို သီးခြားကိုင်တွယ်နိုင်သည်—
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
loopback လိပ်စာကို သင့် HTTP ပရောက်စီဖြင့် အစားထိုးပါ၊ သို့မဟုတ် ပရောက်စီမှတစ်ဆင့် နှိုင်းယှဉ်ရန် HTTP proxy စာရင်းမှ တစ်ခုရွေးပါ။ service က ခွင့်ပြုလျှင် HTTPS ပစ်မှတ်သို့ ချိတ်ဆက်မှုကို CONNECT မှတစ်ဆင့် သယ်ဆောင်နိုင်သည်။ listener ၏ ပရိုတိုကောနှင့် authentication ပံ့ပိုးမှုသည် handler နှင့် ကိုက်ညီရမည်။
default opener ကို မပြောင်းပါနှင့်
လမ်းကြောင်းကို တာဝန်ယူသော object မှတစ်ဆင့် direct.open သို့မဟုတ် proxied.open ကို ခေါ်ပါ။ install_opener သည် urllib convenience call များသုံးသော process တစ်ခုလုံး၏ default ကို ပြောင်းသည်။ ထို့ကြောင့် ၎င်းကိုသုံးသော library က မသက်ဆိုင်သည့် code ကို သက်ရောက်နိုင်သည်။ အထက်ပါ သီးခြား opener အတွက် မလိုအပ်ပါ။
timeout argument သည် operation တစ်ခု၏ setting ဖြစ်ပြီး transfer တစ်ခုလုံး၏ အမှန်တကယ်ကြာချိန်အတွက် သတ်မှတ်ချက် မဟုတ်ပါ။ အလုပ်လိုအပ်သော ဒေတာသာ ဖတ်ပါ။ စုစုပေါင်းအချိန်ကို တင်းကျပ်စွာ ကန့်သတ်ထားလျှင် ပိုမိုမြင့်သောအဆင့်ရှိ deadline သုံးပါ။
ဤ opener object များသည် အခြား library ၏ client၊ ရှိပြီးသား process သို့မဟုတ် browser ၏ ပရောက်စီ setting များကို မပြောင်းပါ။