প্রমাণীকরণহীন 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 বাছুন।

সম্পর্কিত নিবন্ধ