לבקשה אסינכרונית אחת דרך פרוקסי 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() אם היישום צריך להפוך סטטוסים לא מוצלחים לחריגות. מנהלי ההקשר האסינכרוניים סוגרים את הסשן ואת התגובה בסיום הבלוקים, גם במקרה של חריגה.

תקציב total של 15 שניות מכסה את פעולת הבקשה. תקציב connect של 5 שניות כולל המתנה לחיבור זמין במאגר, ולכן מאגר עמוס יכול לנצל אותו עוד לפני פתיחת שקע חדש. ההבדל חשוב כאשר מתאימים את הקריאה הבודדת לבדיקות במקביל.

trust_env=False שומר את המסלול המוצג מפורש. aiohttp אינו מגלה כברירת מחדל משתני סביבה של פרוקסי; ייצוא משתנה במסוף אחר לא יגדיר את הקריאה הזאת. בחרו ב-trust_env=True רק כשהסביבה שהתהליך ירש היא מדיניות הניתוב הרצויה.

מאמרים קשורים