HTTP প্রক্সি দিয়ে একটি aiohttp অনুরোধ
aiohttp দিয়ে প্রমাণীকরণহীন HTTP প্রক্সি অনুরোধ করুন, স্ট্যাটাস দেখুন এবং স্পষ্ট অ্যাসিঙ্ক জীবনচক্রে শেষ করুন।
প্রমাণীকরণহীন HTTP প্রক্সি দিয়ে একটি অ্যাসিঙ্ক অনুরোধের জন্য পথটি session.get()-এ রাখুন। প্রয়োজনে প্রকল্পে aiohttp যোগ করুন:
uv add aiohttpনিচের নথির ঠিকানা নিজের HTTP লিসেনার বা HTTP প্রক্সির তালিকা থেকে কোনো প্রার্থী দিয়ে বদলান। সেটিকে HTTPS গন্তব্যে CONNECT অনুমতি দিতে হবে; কেবল SOCKS সমর্থিত এন্ডপয়েন্টে এই proxy আর্গুমেন্টের বদলে উপযুক্ত কানেক্টর লাগে।
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 স্ট্যাটাস ও প্রতিক্রিয়া লেখার প্রথম 200 অক্ষর দেখায়। এখানে 403 বা 429-ও পরীক্ষা করা যায় এমন প্রতিক্রিয়া থাকে; অ্যাপকে অসফল স্ট্যাটাস ব্যতিক্রমে বদলাতে হলে response.raise_for_status() ডাকুন। অ্যাসিঙ্ক কনটেক্সট ম্যানেজার ব্লক শেষে সেশন ও প্রতিক্রিয়া বন্ধ করে, ব্যতিক্রম হলেও।
15 সেকেন্ডের total বাজেট অনুরোধের কাজটি অন্তর্ভুক্ত করে। 5 সেকেন্ডের connect বাজেটে পুলে খালি সংযোগের অপেক্ষাও ধরা হয়, তাই ব্যস্ত পুল নতুন সকেট খোলার আগেই তা খরচ করতে পারে। একটি কলকে সমসাময়িক পরীক্ষায় বদলানোর সময় এ পার্থক্য গুরুত্বপূর্ণ।
trust_env=False দেখানো পথটি স্পষ্ট রাখে। aiohttp ডিফল্টভাবে প্রক্সি পরিবেশ-চলক খুঁজে পায় না; অন্য টার্মিনালে একটি রপ্তানি করলে এই কল কনফিগার হয় না। প্রক্রিয়ার উত্তরাধিকারসূত্রে পাওয়া পরিবেশই কাঙ্ক্ষিত রাউটিং নীতি হলে কেবল trust_env=True বাছুন।