You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

httpx异步API:DEBUG级别下如何记录所有请求头?

解决httpx异步API日志不记录请求头的问题

httpx默认的DEBUG级别日志不会记录请求头,要实现这一点,最直接的方式是利用**请求钩子(Event Hooks)**手动添加请求头的日志记录逻辑,以下是具体实现:

方法:使用请求钩子记录请求头

通过为AsyncClient添加request钩子,在请求发送前捕获并打印请求头:

import asyncio
import logging
import httpx

# 配置基础日志(确保级别为DEBUG)
logging.basicConfig(
    level=logging.DEBUG,
    format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
# 获取httpx专属日志记录器
httpx_logger = logging.getLogger("httpx")

async def log_request_headers(request):
    """自定义钩子函数,记录请求头"""
    httpx_logger.debug(f"Request [{request.method} {request.url}] Headers: {dict(request.headers)}")

async def main():
    # 初始化异步客户端并绑定请求钩子
    async with httpx.AsyncClient(event_hooks={"request": [log_request_headers]}) as client:
        # 发送测试请求
        await client.get("https://httpbin.org/get")

if __name__ == "__main__":
    asyncio.run(main())

补充说明

  • 钩子函数log_request_headers会在每个请求发送前被调用,直接从request对象中提取并记录请求头
  • 原有的响应头日志会保持默认的DEBUG级记录,无需额外修改
  • 如果需要隐藏敏感请求头(如Authorization),可在钩子函数中添加过滤逻辑:
    async def log_request_headers(request):
        headers = dict(request.headers)
        # 隐藏敏感字段
        if "Authorization" in headers:
            headers["Authorization"] = "***REDACTED***"
        httpx_logger.debug(f"Request [{request.method} {request.url}] Headers: {headers}")
    

内容的提问来源于stack exchange,提问作者Grigory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:34:57