开发者网络工具箱:抓包、调试、API测试一网打尽

接口调不通的绝望时刻

你写完前端代码,点击按钮,页面一片空白。控制台没有报错,Network面板里请求红彤彤一片。后端同事说"我这好好的啊",PM站在你身后问"什么时候能好"。

这时候你最需要的不是咖啡,是一套趁手的网络调试工具。

开发者每天和HTTP请求打交道的时间,可能比写代码还多。接口联调出问题、性能优化找不到瓶颈,哪一样离得开抓包?但很多人用了一两年Charles,除了点个录制按钮,别的功能一概不知。mitmproxy听说过,不知道怎么用。Postman收藏了一堆接口,从没整理过。

这篇文章把开发者常用的网络工具捋一遍,不是工具列表,是实战指南。

先搞懂代理是什么

聊抓包工具之前,得先明白它们是怎么工作的。核心原理就一个词:代理。

想象你去餐厅点菜。正常情况下,你直接跟服务员说我要一份宫保鸡丁。服务员记下来,去厨房下单,菜做好端给你。这是普通的HTTP请求。

抓包工具就像一个"监听服务员"。你点什么菜,它先记在小本本上,然后帮你转告真正的服务员。厨房做好菜,它先过目一遍,再端给你。整个过程里,它知道你点了什么、花了多少钱、厨房给了什么。

用技术语言说,抓包工具在客户端和服务器之间架了一个中间人。客户端的请求先发到代理服务器,代理转发给目标服务器;服务器的响应也先经过代理,再返回给客户端。这一来一回,全被记录下来了。

HTTPS稍微复杂一点。因为数据是加密的,直接拦截只能看到乱码。工具的做法是生成一个自签名证书,骗客户端说"我就是目标服务器"。客户端相信了,用工具的公钥加密数据,工具解密后能看到明文,再用自己的证书和真正的服务器通信。

这也是为什么第一次用Charles或者Fiddler,要手动安装证书。没有证书,HTTPS流量就是一堆看不懂的乱码。

Charles:macOS开发者的老朋友

Charles是macOS上最流行的抓包工具,官方售价50美元,界面直观,功能全面。Windows用户也能用,但体验不如原生应用那么丝滑。

最常用的功能是SSL Proxying。开启之后,HTTPS请求的请求头、请求体、响应内容一目了然。点击某个请求,右侧面板会显示详细信息,包括耗时、大小、状态码。

断点调试是个被低估的功能。右键某个接口,选择Breakpoints,下次请求走到这里会自动暂停。你可以修改请求参数再放行,看看服务器怎么响应;也可以修改返回内容,测试前端的异常处理逻辑。比写mock接口快多了。

Repeat和Repeat Advanced适合做接口压测。同一个请求发100次,看看响应时间波动大不大。Repeat Advanced还能并发发送,模拟多用户场景。

Map Local和Map Remote是两个神器。Map Local把线上接口的响应替换成本地文件,前端开发时不用等后端部署;Map Remote把请求重定向到另一个服务器,测试环境切生产环境,改个配置就行。

手机抓包是移动端开发的刚需。Charles菜单栏选择Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device,按提示操作。手机和电脑连同一个WiFi,手机WiFi设置里代理指向电脑IP:8888。然后就能看到手机上所有HTTP请求了。

有一点要注意,iOS 10.3之后,安装证书后还要在"设置-关于本机-证书信任设置"里手动开启信任。不少人卡在这一步,抓不到包还以为Charles坏了。

Fiddler:Windows上的免费选择

Fiddler和Charles功能差不多,免费,Windows原生体验更好。微软官方都在用。

界面布局和Charles略有不同。左侧是请求列表,右侧是详情面板。默认只显示URL和状态码,想看更多信息得自己加列。

Filters功能强大但藏得深。Rules菜单下,可以按域名、请求方法、响应状态码、内容类型过滤。比如只想看某个域名的请求,勾选Request Headers里的Host,填入域名就行。

Fiddler Script是进阶玩法。基于JScript.NET,能写脚本自动修改请求或响应。比如给所有请求加一个自定义Header,或者把某个接口的返回值替换成mock数据。不会写也没关系,网上有很多现成脚本复制粘贴。

Composer相当于内置的Postman。手动构造请求,设置Header和Body,点击Execute发送。测试接口的时候不用切应用。

导出功能也很实用。选中几个请求,右键Export Sessions,选HAR格式。可以把抓到的包发给后端同事分析,或者导入其他工具继续处理。

mitmproxy:命令行爱好者的利器

Charles和Fiddler都是GUI工具,mitmproxy走的是命令行路线。对,就是那种黑底白字的终端界面。

为什么有人喜欢命令行?快。不需要鼠标点来点去,键盘敲几行命令就能完成复杂操作。而且mitmproxy支持Python脚本扩展,自动化程度比GUI工具高得多。

安装很简单,pip install mitmproxy,或者brew install mitmproxy。截止2026年2月,最新版本是11.0。三个命令分别对应三种界面:mitmproxy是交互式终端界面,mitmdump是纯命令行输出,mitmweb是浏览器界面。

最实用的功能是内联脚本。写一个Python文件,mitmproxy加载后,每个请求都会经过你的脚本处理。

from mitmproxy import http

def request(flow: http.HTTPFlow) -> None:
    # 给所有请求加一个自定义Header
    flow.request.headers["X-Debug"] = "true"

def response(flow: http.HTTPFlow) -> None:
    # 把某个接口的返回值替换掉
    if "api.example.com/test" in flow.request.pretty_host:
        flow.response.text = '{"code": 0, "data": "mocked"}'

这个脚本干了这么几件事:给所有请求加一个调试Header,拦截特定接口,返回mock数据。用GUI工具得点好几次鼠标,这里几行代码搞定。

mitmproxy的另一个优势是性能。没有GUI的开销,能处理更高并发的请求。做性能测试或者压力测试的时候,差距就出来了。

Postman不是唯一选择

API测试工具里,Postman知名度最高。但不是所有人都喜欢它。客户端越来越臃肿,启动慢,占用内存大,免费版功能又有限。

Hoppscotch是个不错的替代品,开源免费,GitHub上超过6万星标。界面简洁,支持Docker自部署,打开就是干净的接口测试界面,没有多余的东西,WebSocket、GraphQL、Socket.IO都支持。

Apifox在国内很火,集文档、调试、Mock、自动化测试于一体。团队成员可以在同一个项目里协作,接口文档和测试用例关联,改动文档自动同步。如果你受够了Word文档和Excel表格管理接口,可以试试。

Insomnia也是个轻量级选择。界面现代,支持环境变量、代码片段生成、插件扩展。如果你只是想快速测几个接口,不需要团队协作功能,Insomnia够用。

实战技巧:几个容易被忽略的功能

大多数人用抓包工具就是看看请求内容,顶多改改参数,高级功能几乎不用。

弱网模拟是测试必备。Charles菜单Proxy -> Throttle Setting,勾选Enable Bandwidth Throttling。可以设置带宽、延迟、丢包率。模拟2G、3G、慢速WiFi,看看应用在网络差的时候会不会崩。Fiddler里也有类似功能,Rules -> Performance -> Simulate Modem Speeds。

请求重放定位竞态条件。同一个接口快速发多次,看看服务器会不会返回不一致的结果。数据库没加锁、缓存穿透,这些问题都能用这种方式复现。

过滤噪音请求。一个页面可能有几十个请求,大部分是静态资源、统计上报。用过滤功能只看API请求,效率高很多。Charles的Filter面板、Fiddler的Filters功能、mitmproxy的–ignore-hosts参数,都能实现。

导出HAR文件分享问题。抓到问题请求后,导出成HAR格式,发给别人复现。比截图完整,比录屏轻量。Chrome DevTools也能导入HAR文件,接收方不用装抓包工具。

网络环境也很关键

工欲善其事,必先利其器。工具再好,网络环境拉胯也是白搭。

调试海外接口、访问GitHub、查阅Stack Overflow,这些场景对网络有要求。有些开发者会配置稳定的网络代理,保证开发环境的顺畅。一个靠谱的网络工具能省去很多折腾时间,让你把精力放在真正重要的事情上。

说到网络工具,推荐一个实用的选择:点击这里获取稳定网络服务 。注册后可以获得稳定的网络环境,访问开发者常用的海外资源更方便。

工具选型建议

选工具没有标准答案,看场景和习惯。

macOS用户,Charles是稳妥选择。界面友好,文档完善,社区活跃。花钱买省心。

Windows用户,Fiddler免费且够用。不想折腾就它了。

喜欢命令行、需要自动化,mitmproxy是最佳选择。学习曲线陡一点,但回报丰厚。

API测试,Postman生态最完善,团队协作首选。个人使用Hoppscotch或Insomnia更轻量。

预算有限、功能要求不高,浏览器DevTools其实能覆盖80%的场景。Network面板录制请求,Console模拟接口,够用。

常见问题

Charles抓不到HTTPS请求怎么办?

检查三点:证书是否安装、SSL Proxying是否开启、端口是否在代理列表里。iOS设备还要确认证书信任设置已开启。

手机抓包配置复杂,有没有简单方法?

Charles和Fiddler都提供了二维码配置,扫描后自动设置代理。如果还是不行,检查手机和电脑是否在同一个WiFi下,防火墙有没有拦截8888端口。

mitmproxy和Charles选哪个?

需要可视化界面、偶尔用用,选Charles。天天抓包、需要批量处理、会写Python,选mitmproxy。两个都用也不冲突。

这些工具会影响网速吗?

会有轻微影响,因为请求要经过代理转发。正常情况下感知不明显。如果感觉明显变慢,检查是不是开了弱网模拟或者日志级别太高。


Sources