from urllib.request import ProxyHandler, build_opener

def make_proxy_opener(proxy_uri):
    return build_opener(ProxyHandler({
        "http": proxy_uri,
        "https": proxy_uri,
    }))

opener = make_proxy_opener("http://proxy.example.net:8080")
# Use opener.open(destination, timeout=10) for this route.

လမ်းကြောင်းသည် စစ်ဆေးမှု၏ဖြစ်ပါက ဤ opener ၏ ကိုယ်ပိုင် open နည်းလမ်းကို ခေါ်ပါ။ ဥပမာ၏ HTTP အဆုံးမှတ်သည် သင့်ဝန်ဆောင်မှုမှ သို့မဟုတ် အများပြည်သူ စစ်ဆေးမှုများအတွက် HTTP proxy စာရင်းမှ လာနိုင်သည်။ ဤအပိုင်းသည် ပိုင်ဆိုင်မှုကို ပြသသည်။ ၎င်းသည် အပြည့်အစုံ စစ်မှန်ကြောင်းအတည်ပြုမှု သို့မဟုတ် ကျန်းမာရေးမူဝါဒကို မသတ်မှတ်ပါ။ အကောင့်သီးသန့် handler များကို ရည်ရွယ်ထားသော client တွင် ချိတ်ထားပါ။

urllib.request.install_opener() သည် နောက်ပိုင်း module အဆင့် urlopen() ခေါ်ဆိုမှုများ အသုံးပြုသော လုပ်ငန်းစဉ်တစ်ခုလုံး၏ မူလတန်ဖိုးကို ပြောင်းသည်။ ထို့ကြောင့် proxy များကို လှည့်ပတ်စစ်ဆေးသူသည် ဆက်စပ်မှုမရှိသော တောင်းဆိုမှုများကို ၎င်း၏ နောက်ဆုံးအဆုံးမှတ်ဖြင့် ကျန်ရစ်နိုင်သည်။ ခေတ္တထည့်သွင်းပြီး ရှင်းလင်းချိန်တွင် ပြန်လည်ထူထောင်ခြင်းသည် မျှဝေထားသော ပြောင်းလဲမှုအတွင်း တစ်ပြိုင်နက် တောင်းဆိုမှုများ လုပ်ဆောင်နိုင်ခွင့်ကို ရှိနေဆဲဖြစ်သည်။

socket.setdefaulttimeout() သည်လည်း နောက်ပိုင်းဖန်တီးသော socket များအတွက် မူလတန်ဖိုးများကို အလားတူ ပြောင်းသည်။ စစ်ဆေးမှုတစ်ခုတည်းသာ ရရှိသင့်သောအခါ လုပ်ဆောင်မှုအဆင့် အချိန်ကန့်သတ်ချက်ကို အသုံးပြုပါ။

စစ်ဆေးမှု၏ တုံ့ပြန်ချက်များကို ပိတ်ပြီး ရလဒ်များကို တိကျစွာထားပါ။ HTTP အမှားတုံ့ပြန်ချက်သည် အလိုအလျောက် သေနေသော proxy နားထောင်သူ မဟုတ်ပါ။ async ဝန်ဆောင်မှုတွင် synchronous urllib စစ်ဆေးမှုကို အသုံးပြုပါက ပိတ်ဆို့သော အလုပ်ကို သင့်လျော်သော worker သို့ ရွှေ့ပါ။ ထိုလုပ်ဆောင်မှု ဆုံးဖြတ်ချက်သည် ကမ္ဘာလုံးဆိုင်ရာ opener ပြောင်းလဲမှုကို သီးခြားမဖြစ်စေပါ။

စစ်ဆေးမှုသည် အခြား ကွန်ရက်မူဝါဒကို ချန်မထားဘဲ ၎င်း၏ လေ့လာတွေ့ရှိချက်ကို ပြန်ပေးသင့်သည်။ ၎င်း၏ ကိုယ်ပိုင် client အရာဝတ္ထုနှင့် ကန့်သတ်ထားသော လုပ်ဆောင်မှုက ထိုနယ်နိမိတ်ကို ရှင်းလင်းစေသည်။

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