ავთენტიფიკაციის გარეშე HTTP პროქსის გავლით ერთი ასინქრონული მოთხოვნისთვის მარშრუტი session.get()-ზე დატოვეთ. საჭიროებისას პროექტს aiohttp დაუმატეთ:

uv add aiohttp

ქვემოთ დოკუმენტაციის მისამართი საკუთარი HTTP მსმენელით ან HTTP პროქსების სიის კანდიდატით შეცვალეთ. მან უნდა დაუშვას CONNECT HTTPS დანიშნულებასთან; მხოლოდ 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 მხოლოდ მაშინ აირჩიეთ, როცა პროცესის მემკვიდრეობით მიღებული გარემო მიზნობრივი მარშრუტიზაციის პოლიტიკაა.

დაკავშირებული სტატიები