请求前中间件 (on_request_before)

源码: https://github.com/x-haose/hs-net/blob/main/examples/middleware/request_before.py

request_before.py
"""
请求前中间件 (on_request_before)

在请求发送前执行,可用于添加 Header、记录日志、修改请求参数等。
"""

import asyncio

from hs_net import Net, SyncNet

# ==================== 同步:请求日志 ====================


def log_example():
    """记录每个请求的方法和 URL。"""
    with SyncNet(retries=0) as net:

        @net.on_request_before
        def log_request(req_data):
            print(f"  -> 发送请求: {req_data.method} {req_data.url}")

        net.get("https://example.com")
        net.get("https://example.com/?page=2")


# ==================== 异步:自动添加 Header ====================


async def header_example():
    """请求前自动注入自定义 Header。"""
    request_count = 0

    async with Net(retries=0) as net:

        @net.on_request_before
        async def add_header(req_data):
            nonlocal request_count
            request_count += 1
            req_data.headers["X-Request-ID"] = f"req-{request_count}"
            print(f"  -> 请求 #{request_count}: {req_data.url}")

        await net.get("https://example.com")
        await net.get("https://example.com")
        print(f"  共发送 {request_count} 个请求")


if __name__ == "__main__":
    print("=== 同步:请求日志 ===")
    log_example()

    print("\n=== 异步:自动添加 Header ===")
    asyncio.run(header_example())