HTTP 调试工具使用教程

[English]

本文将介绍在 HTTP 开发中常用的调试工具,包括调试日志(Debug Log)、本地 HTTP 测试工具和无线抓包,并说明各工具的基本用途及使用方法。。

概述

HTTP 是一种客户端-服务器通信协议,基于请求/响应模式(Request/Response),广泛应用于网页浏览、API 接口访问和微服务通信。进一步说明以及相关示例可参考 HTTP 示例

在开发或调试 HTTP 应用时,开发者可能会遇到各种异常,例如连接超时、请求失败、响应延迟或数据错误等。

当程序出现异常时,可先观察 WARN/ERROR 日志,快速定位异常发生的大致环节:

  • 如果日志中打印了 HTTP 状态码,可通过 HTTP 状态码定义 查找状态码对应的含义,获取服务器对请求的处理结果。

  • 如果异常发生在 请求发送或响应解析环节,可先使用 本地 HTTP 测试工具 排查服务器环境问题。

如果以上方法均无法定位问题,并且服务器和网络环境已确认正常,可根据实际情况选择开启更详细日志(HTTP Debug Log)或使用 无线抓包 进行进一步排查。

HTTP Debug Log

HTTP 设备端日志

在排查 HTTP 问题时,设备端日志可以查看程序内部状态,是分析请求发送与响应接收流程的主要信息来源。

在默认配置下,设备端日志只输出基础流程信息,例如请求是否成功发送、响应状态码或错误码,用于确认核心步骤是否执行,但不会展示更细分的内部状态。因此,在某些排查阶段,需要根据情况 调整日志等级 以获取更多细节。

日志库共有六个详细程度级别,具体请参考 日志级别

HTTP 可简单分为以下几个层级:

  • 应用层:生成和处理 HTTP 请求/响应,执行业务逻辑。

  • TLS 层:负责 TLS 握手、证书校验以及数据的加密与解密,为上层提供安全的通信通道。

  • lwIP 层:负责 TCP/IP 封装、网络传输和连接管理。

  • Wi-Fi 层:负责无线连接和物理数据收发,是最底层的网络接口。

应用层关注 HTTP 消息和业务,TLS 层关注数据安全,lwIP 层关注网络传输,Wi-Fi 层关注无线收发,日志从下到上逐层提供调试信息。

不同层级的日志信息侧重点不同,Debug Log 的开启方法也不同,具体说明如下。

修改最大日志等级

全局最大日志等级决定了日志输出的上限,默认为 INFO 级别,若需要查看 DEBUG 或 VERBOSE 级别的调试日志,必须首先将全局最大日志等级提升。否则即使单独模块设置为 DEBUG 或 VERBOSE 级别,也无法打印 DEBUG 或 VERBOSE 级别日志。

修改最大日志等级方法如下:

备注

以下 menuconfig 路径基于 ESP-IDF v5.5.2,不同版本中配置项位置可能有所调整。

  • 进入 menuconfig 后依次选择 Component config > Log > Log Level > Maximum log verbosity,勾选 DEBUG 选项后保存配置。

应用层 Debug Log 开启步骤

在排查 HTTP 应用问题时,应用层日志是分析客户端请求/响应流程的重要信息来源。开启应用层 Debug Log 的步骤如下:

  1. 修改最大日志等级 至 DEBUG。

  2. 动态修改模块的日志等级:可以通过在代码中调用 esp_log_level_set() 动态修改指定模块的日志等级,该 API 使用说明请参考 日志级别控制。建议的修改步骤如下:

esp_log_level_set("HTTP_CLIENT", ESP_LOG_DEBUG);    // 修改 HTTP_CLIENT 模块日志等级至 DEBUG
esp_log_level_set("HTTP_CLIENT", ESP_LOG_VERBOSE);  // 修改 HTTP_CLIENT 模块日志等级至 VERBOSE

备注

  • 为防止日志量过大,建议将需要调试的关键模块设置为 DEBUG,既能输出关键日志,又可以控制整体日志量。

  • 尽量避免同时将所有模块的日志级别设置为 DEBUG 或 VERBOSE。

HTTP 设备端相关日志主要包含以下模块(参考自 esp_http_client 示例):

  • HTTP_CLIENT:处理 HTTP 协议流程,包括构造请求、解析响应报文、处理重定向和状态码,同时负责请求的发送和内部状态管理,用于排查连接异常、请求/响应异常或业务逻辑调用异常。

  • transport_base:底层 TCP/TLS 传输封装基础模块,用于排查 TCP 连接失败、数据发送/接收异常或网络传输问题。

  • esp-tls:TLS 握手、证书加载与验证,用于排查 HTTPS 握手失败、证书验证失败或加密套件不匹配。

TLS 层 Debug Log 开启步骤

在 ESP-IDF 中,TLS 协议由 mbedTLS 库实现。开启 TLS 层 Debug Log 的步骤如下:

  1. 修改最大日志等级 至 DEBUG。

备注

以下 menuconfig 路径基于 ESP-IDF v5.5.2,不同版本中配置项位置可能有所调整。

  1. 进入 menuconfig 后依次选择 Component config > mbedTLS,按空格开启 Enable mbedTLS debugging

  1. 开启日志后可通过 Set mbedTLS debugging level 修改日志级别:

  • 该日志默认级别为 VERBOSE,建议修改至 DEBUG 级别,以控制日志量。

lwIP 层 Debug Log 开启步骤

开启 lwIP 层 Debug Log 的步骤如下:

  1. 修改最大日志等级 至 DEBUG。

备注

以下 menuconfig 路径基于 ESP-IDF v5.5.2,不同版本中配置项位置可能有所调整。

  1. 进入 menuconfig 后依次选择 Component config > LWIP,按空格开启 Enable LWIP Debug

  1. 按回车进入 Enable LWIP Debug 页面,按需开启对应的子模块日志,子模块包括 netif、pbuf、etharp、api lib、socket、IP、ICMP、DHCP、IP6、ICMP6、TCP、UDP、SNTP、DNS、bridge generic、bridge FDB、bridge forwarding。

有关启用 lwIP 层调试日志的进一步说明可参考此 ESP-FAQ

Wi-Fi 层 Debug Log 开启步骤

在 ESP-IDF 中,Wi-Fi 连接相关日志主要分布在 wifiwpa 模块中,分别对应 链路管理无线安全认证。开启 Wi-Fi 层 Debug Log 的步骤如下:

  1. 修改最大日志等级 至 DEBUG。

  2. 查看 wifi 模块调试日志wifi 模块日志默认开启,可以通过在代码中调用 esp_log_level_set() 修改其日志等级至 DEBUG,该 API 使用说明请参考 日志级别控制。建议的修改步骤如下:

esp_log_level_set("wifi", ESP_LOG_DEBUG);
  1. 查看 wpa 模块调试日志wpa 模块日志默认关闭,开启步骤如下。

备注

以下 menuconfig 路径基于 ESP-IDF v5.5.0,不同版本中配置项位置可能有所调整。

  • 进入 menuconfig 后依次选择 Component config > Wi-Fi,按空格开启 Print debug messages from WPA Supplicant

  • 在代码中调用 esp_log_level_set() 修改其日志等级至 DEBUG,该 API 使用说明请参考 日志级别控制。建议的修改步骤如下:

esp_log_level_set("wpa", ESP_LOG_DEBUG);

本地 HTTP 测试工具

测试工具使用场景

HTTP 测试工具用于模拟客户端向服务器发请求,独立于设备端运行,可快速确认 HTTP 服务器及网络环境是否正常,从而辅助问题排查,减少因环境异常导致的误判或重复调试:

  • 如果测试工具无法连接目标 URI,问题通常出在路由器到服务器的网络或服务器本身。

  • 如果测试工具连接正常,问题通常出在路由器到设备的网络或设备端代码。

对于确认为设备端的问题,需要进一步结合 HTTP Debug Log无线抓包 分析,进一步检查设备的网络配置和程序逻辑。

常用测试工具

在 HTTP 开发和调试中,本地测试工具主要用于验证客户端与服务器的连接、调试请求/响应、检查 Header 和 Body 配置,以及模拟客户端行为。这类工具可以快速帮助开发者确认通信是否正常,同时支持批量请求和自动化测试。

常见的本地测试工具可分为两类:图形化界面(GUI)工具和命令行界面(CLI)工具。

  • GUI 工具 提供可视化操作,便于直观配置请求 URL、Header 和 Body,并查看返回的状态码和响应内容,适合在调试阶段快速验证接口行为。

  • CLI 工具 通过命令或脚本方式发起请求,更适合批量请求测试、自动化验证以及在无图形界面的环境中使用。

在实际开发中,GUI 工具通常用于接口调试和问题复现,而 CLI 工具更常用于脚本化测试、持续集成或大规模请求验证。

常用的本地 HTTP 测试工具包括:

  • Postman:提供完整的 GUI 操作界面,可以构建请求集合、查看响应状态和内容、支持环境变量和脚本化测试。

  • HTTPie:既有 CLI 版本,也提供 GUI 应用。CLI 版本支持直观格式化请求和响应,适合快速调试和自动化接口验证;GUI 版本则方便可视化操作和管理请求集合。

  • cURL:轻量级 CLI 工具,支持几乎所有 HTTP 方法和请求参数配置,适合在无 GUI 环境下进行接口调试、性能测试或自动化脚本执行。

测试工具使用说明

无线抓包

无线抓包能够直接展示真实网络报文,主要用于排查 网络层或传输层 异常,例如请求超时、响应延迟或连接失败等,用于确认客户端与服务器之间的底层链路是否稳定可靠。

进入抓包阶段前,需先完成以下前置验证,避免无效抓包:

  • 使用 HTTP 测试工具 确认服务器服务正常、网络链路可达、端口/防火墙配置有效、TLS 证书兼容。

  • 使用 Debug Log 确认请求参数(URL、Header、Body 等)配置正确、证书加载正常、SDK 连接流程无明确错误码或异常日志。

当测试工具运行正常、Debug Log 未发现明确问题,但仍存在连接不稳定、消息丢包、频繁断连等现象时,需通过抓包进一步定位。

无线抓包步骤可参考 无线抓包教程