Python Requests တွင် proxy IP သုံးခြင်း
Requests တွင် တောင်းဆိုမှုတစ်ခုစီ၏ proxy လမ်းကြောင်းကို သတ်မှတ်ပြီး endpoint scheme မှန်ကန်စွာရွေးကာ timeout နှင့် HTTPS tunnel ချို့ယွင်းမှုများကို ကိုင်တွယ်ပါ။
သင့်ပရောဂျက်တွင် Requests ရှိပြီဆိုလျှင် ခေါ်ဆိုမှုထဲသို့ proxy mapping ပေးပါ။
import requests
proxies = {
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)
loopback endpoint အစား အလုပ်လုပ်နေသော သင့် proxy သို့မဟုတ် ယခုတောင်းဆိုမှုနှင့် စမ်းသပ်မည့် HTTP proxy စာရင်းမှ တစ်ခုကို သုံးပါ။ key များက ဦးတည်ရာ၏ scheme ကို ဖော်ပြသည်။ HTTP URL များအတွက် http၊ HTTPS URL များအတွက် https ဖြစ်သည်။ value များက proxy listener ကို ဖော်ပြသည်။ သင့်ကွန်ရက်တွင် သီးခြားလမ်းကြောင်းများ လိုလျှင် မတူညီသော endpoint များ ဖြစ်နိုင်သည်။
proxy value http:// ကို https key အောက်တွင် ထည့်ထားခြင်းသည် ရည်ရွယ်ချက်ရှိသည်။ Requests သည် HTTP listener ထံ CONNECT tunnel တောင်းပြီး ထို tunnel မှတစ်ဆင့် ဦးတည်ရာနှင့် TLS ချိတ်ဆက်သည်။ ယင်းသည် proxy ၏ ဦးတည်ရာနှင့် port ဆိုင်ရာ မူဝါဒအပေါ် မူတည်သည်။ value ကို https:// ပြောင်းလျှင် proxy ကိုယ်တိုင်နှင့် TLS ချိတ်ဆက်ရန် တောင်းဆိုခြင်း ဖြစ်သည်။ listener က စာသားရှင်း HTTP ကို မျှော်လင့်ထားလျှင် မအောင်မြင်နိုင်ပါ။
timeout ကိန်းနှစ်ခု၏ အဓိပ္ပာယ်
timeout=(5, 15) သည် ချိတ်ဆက်ခြင်းနှင့် ဖတ်ခြင်းအတွက် timeout များကို သတ်မှတ်သည်။ စုစုပေါင်းအချိန်ကို ဆယ့်ငါးစက္ကန့်အဖြစ် မကန့်သတ်ပါ။ အချိန်ကွာ၍ ဝင်လာသောဒေတာ၊ လိပ်စာအများအပြားနှင့် ချိတ်ဆက်ရန် ကြိုးစားမှုများကြောင့် ကြာချိန် ပိုရှည်နိုင်သည်။ ဤ setting ကို ချန်လှပ်ထားလျှင် Requests က ယေဘုယျ timeout မပေးပါ။ ထို့ကြောင့် တုံ့ပြန်မှုနှင့် ကိုက်ညီသော ကန့်သတ်ချက်များ ရွေးပြီး အလုပ်အတွက် တင်းကျပ်သော စုစုပေါင်းအချိန် သတ်မှတ်ချက်လိုလျှင် application အဆင့် deadline ထည့်ပါ။
ချို့ယွင်းမှုဖြစ်သည့် အဆင့်၌ ကိုင်တွယ်ပါ
try:
response = requests.get(
"https://example.com/",
proxies=proxies,
timeout=(5, 15),
)
response.raise_for_status()
except requests.exceptions.ProxyError as error:
print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
print("HTTP status:", error.response.status_code)
CONNECT ငြင်းပယ်ခံရလျှင် ဦးတည်ရာမှ တုံ့ပြန်မှု မရှိသေးမီ ProxyError ဖြစ်ပေါ်နိုင်သည်။ HTTPError အပိုင်းသည် error status ပါသော တုံ့ပြန်မှု ရရှိပြီးနောက် ဖြစ်သည်။ Timeout က သတ်မှတ်ထားသော အချိန်ကန့်သတ်ချက် ကျော်လွန်ကြောင်း ဆိုလိုသည်။ ချိတ်ဆက်မှုတည်ဆောက်စဉ် exception chain များကို မိမိစက်ပေါ်တွင် စစ်ဆေးပါ။ မျှဝေမီ ဝင်ရောက်ခွင့်အချက်အလက်ပါသော endpoint များနှင့် ကိုယ်ပိုင် URL များကို ဖယ်ရှားပါ။
လက်မှတ်စစ်ဆေးခြင်းကို ဖွင့်ထားပါ။ ခွင့်ပြုထားသော ကွန်ရက်က ကိုယ်ပိုင် CA သို့မဟုတ် စီမံထားသော ကြားဖြတ်စစ်ဆေးမှု သုံးလျှင် စစ်ဆေးခြင်းပိတ်မည့်အစား မျှော်လင့်ထားသော ယုံကြည်မှုဆိုင်ရာ အချက်အလက်များကို ပေးပါ။
တောင်းဆိုမှုတစ်ခုစီအတွက် အတိအလင်း ထည့်ထားသော entry များက ဤနေရာတွင် ပေးထားသော လမ်းကြောင်းများကို ထိန်းချုပ်သည်။ သို့သော် မပါဝင်သော scheme များအပေါ် environment မှ proxy ရှာဖွေခြင်း၏ သက်ရောက်မှု ရှိနိုင်သေးသည်။ ခေါ်ဆိုမှုကို ပြန်သုံးနိုင်သော Session ထဲသို့ ရွှေ့ရာတွင် environment variable များ၊ Session မူလသတ်မှတ်ချက်များနှင့် တောင်းဆိုမှုတစ်ခုစီ၏ အစားထိုးသတ်မှတ်ချက်များ မည်သို့ ပူးပေါင်းအလုပ်လုပ်ရမည်ကို ဆုံးဖြတ်ပါ။ ချိတ်ဆက်မှု ပြန်သုံးခြင်းနှင့် လမ်းကြောင်းမူဝါဒသည် သီးခြားရွေးချယ်မှုများ ဖြစ်သည်။