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
相关产品推荐
相关产品推荐

