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