Fiddler如何抓取Java程序请求?

更新时间:2026-08-27 12:09

用Fiddler抓Java程序,先让Java进程把流量交给Fiddler的本地代理。要查看HTTPS的请求和响应,再开启解密并处理Java的证书信任。下面以Fiddler监听 127.0.0.1:8888 为例。你的监听端口不同,就把示例中的 8888 换成实际值。

先让Java请求经过Fiddler

1、启动Fiddler并记下监听端口

打开Fiddler后先看抓包是否处于开启状态。Java不一定跟随系统代理,因此只启动软件还不够,必须把代理地址和端口传给Java进程。

2、用JVM参数设置HTTP与HTTPS代理

最方便的做法是在启动命令中同时设置两套属性。HTTP请求使用 http.proxyHosthttp.proxyPort。HTTPS请求使用 https.proxyHosthttps.proxyPort。两者都指向本机Fiddler。

java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8888
-Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8888
-jar app.jar

项目由IDE、Spring Boot启动配置、Docker或服务脚本拉起时,要把这些参数加到实际启动JVM的位置。容器里的 127.0.0.1 指向容器自己,不是宿主机。这时要改为容器能够访问的宿主机地址,并让Fiddler接受该连接。

3、不能改启动命令时在代码中设置

也可以在发起网络请求之前设置系统属性。不要只设置HTTPS:程序同时调用HTTP和HTTPS接口时,两组属性都应写全。

System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("https.proxyPort", "8888");

HTTPS请求还要开启解密与证书信任

会话里只看到 CONNECTTunnel to,说明代理已经接到连接,但HTTPS内容还未解密。进入【Tools】→【Options】→【HTTPS】,勾选【Capture HTTPS CONNECTs】和【Decrypt HTTPS traffic】。首次启用时按提示信任Fiddler Root证书。

Fiddler如何抓取Java程序请求?

这一步让Windows上使用系统证书库的应用能够信任Fiddler。但Java/JRE通常使用自己的信任库:Java请求在启用解密后报握手或证书校验错误时,需要把导出的Fiddler根证书导入正在运行该程序的JRE/JDK的 cacerts,或在测试启动参数中指定独立trustStore。不要为了抓包关闭证书校验或在业务代码中接受所有证书。

Fiddler如何抓取Java程序请求?

发起一次请求并判断是否抓到

重启Java程序后,调用一个确定会访问网络的接口。Fiddler左侧会话列表出现目标域名、URL、方法和状态码,说明流量已经过代理。选中会话后,在Inspectors中查看请求头、请求体和响应内容。可用【Filters】按目标主机筛选,避免被浏览器或其他程序的流量干扰。

Fiddler如何抓取Java程序请求?

Fiddler没有抓到Java请求时怎么查

看到的现象先检查哪里
完全没有Java会话检查实际JVM是否拿到了四个代理属性;HTTP客户端或框架也可能自行指定代理,需一并检查HTTP客户端或框架是否自行指定了代理。
只有CONNECT,没有明文内容回到【HTTPS】检查是否已勾选解密,并重新启动应用后再请求。
启用解密后握手失败检查导入的是否为Fiddler根证书,且导入的 cacerts 正是该Java进程实际使用的信任库。
程序运行在容器或远程机器不要把容器内的 127.0.0.1 当作宿主机;改用可达地址,并核对监听与网络访问设置。

抓包完成后,移除测试用代理参数和独立信任库配置。抓包结束后关闭不再需要的解密设置,避免后续流量继续经过本地代理。