通过免认证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。

相关文章