အသေးစား 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 လမ်းကြောင်းကို လိုက်သည်။

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