HTTP proxy မှတစ်ဆင့် aiohttp တောင်းဆိုမှုတစ်ခု
အတည်ပြုမှုမလိုသော HTTP proxy ဖြင့် aiohttp တောင်းဆိုမှုလုပ်၍ status စစ်ပြီး ရှင်းလင်းသော async lifecycle အတွင်း အဆုံးသတ်ပါ။
အတည်ပြုမှုမလိုသော HTTP proxy မှတစ်ဆင့် asynchronous တောင်းဆိုမှုတစ်ခုအတွက် လမ်းကြောင်းကို session.get() ပေါ်တွင်ထားပါ။ လိုလျှင် ပရောဂျက်တွင် aiohttp ထည့်ပါ။
uv add aiohttpအောက်ပါစာရွက်စာတမ်းလိပ်စာကို သင့် HTTP listener သို့မဟုတ် HTTP proxy စာရင်း မှ ရွေးချယ်စရာဖြင့် အစားထိုးပါ။ ၎င်းသည် HTTPS ရည်ရွယ်ရာသို့ CONNECT ခွင့်ပြုရမည်။ SOCKS သာပံ့ပိုးသော endpoint အတွက် ဤ proxy argument အစား သင့်တော်သော connector လိုသည်။
import asyncio
import aiohttp
async def main():
timeout = aiohttp.ClientTimeout(total=15, connect=5)
async with aiohttp.ClientSession(
timeout=timeout,
trust_env=False,
) as session:
async with session.get(
"https://example.com/",
proxy="http://203.0.113.10:8080",
) as response:
print(response.status)
print((await response.text())[:200])
asyncio.run(main())
တောင်းဆိုမှုသည် HTTP status နှင့် တုံ့ပြန်စာသား၏ ပထမ 200 လုံးကို ပြသည်။ 403 သို့မဟုတ် 429 သည် ဤနေရာတွင် စစ်ဆေးနိုင်သောတုံ့ပြန်ချက်အဖြစ် ရှိနေသေးသည်။ မအောင်မြင် status ကို exception ပြောင်းလိုလျှင် response.raise_for_status() ခေါ်ပါ။ async context manager များသည် block ပြီးလျှင် session နှင့် response ကို ပိတ်ပြီး exception ရှိလျှင်လည်း ပိတ်သည်။
15 စက္ကန့် total အချိန်ဘတ်ဂျက်က request operation ကို လွှမ်းခြုံသည်။ 5 စက္ကန့် connect တွင် pool ၏ လွတ်နေသော connection ကို စောင့်ချိန်ပါဝင်သဖြင့် အလုပ်များသော pool က socket အသစ်မဖွင့်မီ ကုန်စေနိုင်သည်။ တစ်ခေါက်တည်းခေါ်ခြင်းကို တစ်ပြိုင်နက်စစ်ဆေးမှုများအဖြစ် ပြောင်းရာတွင် ဤကွာခြားချက်အရေးကြီးသည်။
trust_env=False က ပြထားသောလမ်းကြောင်းကို အတိအလင်းထားသည်။ aiohttp သည် default အနေဖြင့် proxy environment variable များကို မရှာပါ။ အခြား terminal တွင် variable တစ်ခု export လုပ်ခြင်းက ဤခေါ်ဆိုမှုကို မပြင်ဆင်ပေးပါ။ process က ဆက်ခံသော environment ကို ရည်ရွယ် routing policy အဖြစ်သုံးလိုမှသာ trust_env=True ရွေးပါ။