易君召
发布于 2026-09-05 / 作者:易君召 / 6 阅读
0

开发中调试 HTTP 请求的常用手段

HTTP 调试核心目标:看请求头、请求体、响应头、响应体、状态码、耗时、Cookie、重定向、SSL/TLS、代理,定位参数错误、跨域、超时、报文格式、服务端返回异常等问题。下面分客户端工具、代码内埋点、抓包工具、服务端调试、网络底层、常见坑完整整理。

一、接口快速测试工具(构造 HTTP 请求)

适合手动发请求,验证接口是否正常。

  1. Postman / Apifox

    • 支持 GET/POST/PUT/DELETE,自定义 Header、Cookie、Query、Body (form‑data/x‑www‑form‑urlencoded/json)

    • 看完整 Request/Response,状态码、响应时间,支持环境变量、代理、SSL 关闭校验

  2. curl(命令行,最通用)

    # 完整打印请求+响应,-v  verbose看完整HTTP报文
    curl -v -X POST https://api.example.com/test \
      -H "Content-Type:application/json" \
      -d '{"name":"test"}'
    
    # 保存响应到文件
    curl -v https://api.example.com > resp.txt
    

    -v 会输出 DNS 解析、TCP 连接、SSL 握手、完整 http request/response 报文,定位握手、证书问题非常好用。

  3. httpie(curl 替代品,输出格式化)

    http -v POST https://api.example.com/test name=test
    

二、浏览器调试(前端 HTTP,最常用)

F12 → Network (网络)面板

  1. 过滤:选择 Fetch/XHR 只看 ajax/fetch 请求;All 看全部 http 请求(图片、js、css)

  2. 选中一条请求:

    • Headers:请求头、响应头、Query 参数、请求 URL、状态码

    • Payload:请求参数,form/json body

    • Response:服务端返回报文

    • Initiator:哪个 JS 代码发起的请求

    • Timing:DNS、TCP、SSL、TTFB、下载耗时,定位慢请求

  3. 重放请求:右键请求 → Replay,或者「Copy as fetch/curl」复制报文到其他工具复现。

局限:浏览器受同源策略、浏览器缓存、Cookie、CORS 限制;看不到非浏览器程序(Java/Python 后端、APP)的 http 流量。

三、抓包工具:捕获进程真实 HTTP 流量

浏览器 Network 只能看浏览器;抓包可以看后端服务、APP、桌面程序真实网络报文。

1. Fiddler(Windows)

原理:本地 HTTP 代理,程序把代理指向 Fiddler,全部 http 流量走它。

  • 可以查看、修改、拦截、重放请求;修改 Request/Response 做 Mock。

  • HTTPS:需要安装 Fiddler 根证书,才能解密 https 报文。

注意:代码里要配置 HTTP 代理 127.0.0.1:8888;Java 需要把 Fiddler 证书导入 JDK 信任库,否则报 SSL 握手失败。

2. Charles(Mac/Windows)

和 Fiddler 类似,代理抓包,移动端 APP 抓包高频使用,手机 wifi 设置代理到本机 IP,安装证书抓 HTTPS。

3. Wireshark(底层数据包抓包)

工作在 TCP/IP 层,不是 HTTP 代理。

  • 可以抓本机、局域网所有数据包;HTTPS 默认是密文,无法直接看到 http 明文

  • 适合排查:TCP 丢包、RST 断开、端口不通、DNS 异常;想看 http 明文优先用 Fiddler/Charles。

  • 如果要解密 HTTPS:需要浏览器导出 SSL key log,Wireshark 加载密钥文件解密。

4. mitmproxy(命令行 / WEB 界面,开源)

mitmproxy  # 交互式控制台抓包
mitmweb    # 浏览器web界面查看流量

作为中间人代理,脚本可以自动化修改 http 请求响应,自动化测试调试很方便。

四、代码层面埋点调试 HTTP 请求

Java(SpringBoot / RestTemplate / OkHttp / HttpClient)

  1. OkHttp:开启拦截器打印完整报文

OkHttpClient client = new OkHttpClient.Builder()
        .addInterceptor(new HttpLoggingInterceptor(System.out::println)
                .setLevel(HttpLoggingInterceptor.Level.BODY))
        .build();

BODY 级别会打印请求头、请求体、响应头、响应体;生产环境关闭,避免日志泄露敏感数据。

  1. Spring RestTemplate:添加拦截器输出报文

  2. Spring WebClient:配置 ExchangeStrategies 打印请求响应 body

  3. Apache HttpClient:设置 logger 级别 DEBUG,输出 http 完整报文

# logback
<logger name="org.apache.http" level="DEBUG"/>

⚠️ Java 使用代理抓 HTTPS:必须把抓包工具证书导入 JDK cacerts,否则 SSLHandshakeException。

Python requests

import requests
import logging
import http.client
http.client.HTTPConnection.debuglevel = 1
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

resp = requests.get("https://api.example.com")

Node.js axios

配置拦截器打印 request /response

axios.interceptors.request.use(req=>{
  console.log("req:",req.method,req.url,req.headers,req.data);
  return req;
})
axios.interceptors.response.use(res=>{
  console.log("resp:",res.status,res.data);return res;
})

五、服务端侧调试 HTTP

SpringBoot

  1. 开启 Tomcat 访问日志 server.tomcat.accesslog.enabled=true,记录每个请求 url、状态码、ip、耗时。

  2. 过滤器 Filter,打印 HttpServletRequest 的请求头、参数。

HttpServletRequest 的 Body 流只能读取一次,读取后业务拿不到,需要包装 Request 重写流。

Nginx access_log / error_log

access_log logs/access.log main;

记录客户端 IP、请求方法、url、状态码、响应大小、耗时、请求头。 可以看到请求有没有到达服务端;区分是客户端错误,还是 Nginx 层错误,还是后端应用错误。

六、定位常见 HTTP 问题调试思路

  1. 接口返回 4xx:400 参数错误、401 未鉴权、403 权限、404 路径错;对比抓包工具和代码发出的真实报文:Header、Content‑Type、body 格式是否一致。很多时候代码发送的 body 和你以为的不一样。

  2. 5xx:服务端异常,看服务端日志 + nginx 日志。

  3. SSL/TLS 握手失败:用 curl -v 排查;证书过期、证书不信任、TLS 版本不匹配。

  4. 请求超时:Network Timing /curl -v 看卡在哪个阶段:DNS?TCP 连接?还是服务端 TTFB 慢。

  5. 跨域 CORS:浏览器 Network 看响应头 Access‑Control‑*;注意:跨域报错只发生浏览器,curl/postman 不会复现 CORS

  6. 代码和 postman 结果不一样:抓包!对比两边真实报文,很多坑:编码、header 大小写、多余换行、隐形字符、Cookie、代理、证书。

七、选型建议

场景

推荐工具

前端页面调试

浏览器 Network

手动构造测试接口

curl / Apifox

Java/Python 后端程序 HTTP 抓包

Fiddler/mitmproxy,配置程序走代理

手机 APP HTTPS 抓包

Charles/mitmproxy

排查 TCP/DNS 底层问题

Wireshark + curl‑v

自动化修改 http 报文

mitmproxy 脚本

重要提醒:生产环境不要开启 BODY 级别的 http 报文日志,会泄露密码、token 等敏感信息。


本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/http-request-debugging-common-methods-guide

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/