urllib3 နှင့် proxy IP အသုံးပြုခြင်း
HTTP proxy အတွက် ProxyManager ရွေးပြီး urllib3 အဖြေ field များကို စစ်ပါ။ ပြန်ကြိုးစားမှုနှင့် SOCKS သီးခြား manager ကို ထည့်တွက်ပါ။
အသေးစား urllib3 proxy စစ်ဆေးမှုအတွက် ပြန်ကြိုးစားမှုများပိတ်ထားသော ProxyManager ကို သုံးပါ။ ၎င်းက အလုပ်မလုပ်တော့သည့်မှတ်တမ်းကို ထပ်စမ်းပြီး စောင့်နေမည့်အစား ပထမကြိုးစားမှုကို ပြသည်။ uv စီမံသော project တွင် —
uv add urllib3စာတမ်း endpoint ကို သင့်ဝန်ဆောင်မှု သို့မဟုတ် HTTP proxy စာရင်းမှ HTTP proxy ဖြင့် အစားထိုးပြီး ထို manager မှ request လုပ်ပါ။
import urllib3
proxy = urllib3.ProxyManager(
"http://203.0.113.10:8080",
timeout=urllib3.Timeout(connect=5, read=10),
retries=False,
)
try:
response = proxy.request("GET", "https://example.com/")
print(response.status)
print(response.data.decode("utf-8", errors="replace")[:200])
finally:
proxy.clear()
အရင် response.status ဖတ်ပြီး response.data စစ်ပါ။ ဤသည် urllib3 ၏ field များဖြစ်သည်။ Requests ပုံစံ status_code နှင့် text က အစားမထိုးနိုင်ပါ။ ဝဘ်ဆိုက်၏ငြင်းပယ်မှုသည် အလုပ်လုပ်သော proxy မှ ရောက်လာနိုင်သည်။ အဖြေမရမီ exception ဖြစ်လျှင် request မပြီးစီးနိုင်ခြင်းကို ပြသည်။
retries=False သည် စစ်ဆေးရန်ရွေးချယ်မှုဖြစ်ပြီး အမှန်တကယ်အသုံးပြုရေး retry မူဝါဒ မဟုတ်ပါ။ Connection 5 စက္ကန့်နှင့် read 10 စက္ကန့်သည် သက်ဆိုင်ရာအဆင့်ကိုသာ ကန့်သတ်ပြီး အာမခံထားသည့် စုစုပေါင်း 15 စက္ကန့်အချိန်ကန့်သတ်မှု မဖြစ်ပါ။ DNS နှင့် အဖြေတိုးတက်မှုက စုစုပေါင်းစောင့်ချိန်ကို သက်ရောက်နိုင်သည်။
နမူနာက body ကို ကြိုတင်တင်ပြီး အဆုံးမှာ manager ၏ pool များကို ရှင်းသည်။ တူညီသော endpoint မှ ထပ်ခါထပ်ခါ request များအတွက် connection ပြန်သုံးနိုင်ရန် အလုပ်ပြီးသည်အထိ manager ကို ထားပါ။ preload_content=False သို့ပြောင်းခြင်းက lifecycle ကို ပြောင်းသည်။ ခေါ်ဆိုသူသည် streamed response ကို ဖတ်ပြီး လွှတ်ပေးရမည်။
နားထောင်နေသည့်ဝန်ဆောင်မှုနှင့်ကိုက်သော manager ကို ရွေးပါ။ အခြားနေရာတွင် URL သိမ်းထားရုံဖြင့် သာမန် PoolManager က proxy နားလည်မသွားပါ။ SOCKS က urllib3.contrib.socks.SOCKSProxyManager နှင့် ၎င်း၏ရွေးချယ်နိုင်သော dependencies ကို သုံးသည်။ အထက်ပါ code က HTTP ProxyManager လမ်းကြောင်းကို လိုက်သည်။