如何在 Mac 下使用 Fiddler

随着组内越来越多同学都用上了 Mac,如何在 Mac 下使用 Fiddler 就成为一个问题。Fiddler 是基于微软的 .Net 技术开发的,没办法直接在 Mac/Linux 下使用。本文介绍一些替代方案(这些方案也适用于 Linux)。

我之前的博客介绍过 Fiddler 工作原理是在浏览器和服务器之间加了一层代理,来达到随意控制本机流量的目的。所以像「为什么我的 Fiddler 抓不到包?」「为什么 Fiddler 意外退出后打不开网页?」这样的问题就很容易解决了:检查你浏览器的代理设置。这里有张 Fiddler 工作原理示意图:

Fiddler 工作原理图

本文介绍的大部分工具和 Fiddler 一样,都需要给浏览器设置代理才能工作。但是相信很多人原本已经设置过代理,浏览器不支持设置多重代理实在让人很郁闷。后面我们会看到,有一个工具很好地解决了这个问题。

最正统的 Mono Fiddler

如果大家最近访问过 Fiddler 官方下载页面,会留意到页面上多了一行文字:

Need a Linux or Mac build? Check out the Alpha build for the Mono framework.

这就是基于 Mono 的 Fiddler。Mono 是一套支持多 OS 的开源工程,提供不同 OS 下的 .NET 运行时。要使用 Mono Fiddler,先要在这里下载 Mono MRE,再在这里下载 dmg 安装包并安装就可以了。在我这里第一次启动非常慢,之后很快。

Mono Fiddler 借助 Mono 的 .NET 运行时,让 Fiddler 在其它操作系统也可以运行,功能上和官方 Fiddler 是完全一致的。简单测试了下,启动和退出都要输入管理员密码,它会自动修改系统代理,基本的查看网络抓包和 Timeline 可以用,估计 Fiddler 已有的 Add-ons 也可以直接拿过来用。

不过进一步测试发现,现阶段的 Mono Fiddler 现在离可用还有一大段距离。软件布局上的错乱比比皆是,一些功能如「拖拽左侧请求到 AutoResponder / Composer」不可用,右键菜单和快捷键都没办法用,中文会乱码,整个软件反应卡顿。问题还有好多,希望后续版本能修正吧。上两张截图:

Mono Fiddler (混搭的界面)

About Mono Fiddler (版本号)

不免费的 Charles

平心而论 Charles 还是挺不错的,不过相比本文介绍的其它「免费 / 开源」工具,它不但收费还很贵,单用户授权卖 $50,可以免费试用 30 天。

Charles 同时支持 Win/Mac/Linux 三大系统,支持常见的 HTTP 和 HTTPS 抓包、构造请求、替换响应等功能。这里就不多介绍它了,更多信息可以去官网了解,下面是 Charles 的截图:

Charles

曾经很火的 Rythem

Rythem 是腾讯 AlloyTeam 开发的类 Fiddler 开源工具,采用 QT 为基础框架,支持 Win/Mac/Linux,支持常见的 HTTP 抓包和替换响应功能。有段时间没更新了,有兴趣的同学可以去这个页面了解更多。下面是 Rythem 官方的截图:

Rythem

另辟蹊径的 Fiddler for Chrome

这是一个由 Welefen 开发的 Chrome 开源扩展(介绍官网),扩展使用 Chrome 提供的 chrome.webRequest Api 来实现 HTTP 抓包和替换响应功能。由于扩展集成在浏览器中,不需要额外设置浏览器代理,也只能抓到浏览器产生的请求。

扩展提供的「Auto Response」功能可以 delay 或 cancel 响应,可以替换响应为线上 URL 或者本地路径(支持目录替换),还可以给响应增加新的 header。在实现「选择本地文件或路径」功能时,为了获取完整路径,用到了 NPAPI 插件。

至于抓包功能,跟浏览器自带开发工具功能差不多。不过浏览器抓包功能只能显示当前页面的请求,某些请求抓不到。例如在 Chrome 的地址栏输入一些内容,它会请求 Suggestion 接口,甚至提前预读。这些 HTTP 请求,用浏览器自带抓包功能无法获得,扩展却可以。

回归 Windows 下的 Fiddler

实际上,我现在如果要使用 Fiddler 的构造请求、 Statistics 或 Timeline 等功能时,还是会用 Windows 下的 Fiddler。当然我的代码环境和浏览器都还是在 Mac 下,Windows 是用虚拟机装的,我要做的只是让 Mac 浏览器发送的 HTTP 请求可以被 Windows 的 Fiddler 抓到并控制。

首先要在 Windows 下的 Fiddler 选择允许其它 IP 连接:

Fiddler Options

接着给 Mac 配置 HTTP 代理,IP 填 Windows 的 IP,端口就是上图中 Fiddler 监听的端口,理论上这样就可以了。实际上,只要两个系统可以 ping 通都可以这样用 Fiddler。我选择开虚拟机,是因为可以共用一套键盘,共享文件也比较方便。

Fiddler in Windows

其它替代方案

很多时候,我们只需要简单的看下页面请求情况,这时直接用浏览器自带开发工具就好了。要构造简单的 HTTP 请求,我一般用一个叫 PostMan 的 Chrome 扩展。既不用修改系统代理,也能满足需求。

最后,再推荐一个专注于替换响应的工具 NProxy。它需要 Node 环境,支持文件和目录替换,还支持替换为多个文件,支持 HTTP 和 HTTPS。使用前同样需要配置代理,这里有更多介绍。

Update @ 2016-01-14:本文写于三年前,目前我在 OSX 下使用的是 whistle 这个工具,非常好用,推荐给大家!

本文链接:参与评论 »

--EOF--

提醒:本文最后更新于 326 天前,文中所描述的信息可能已发生改变,请谨慎使用。

专题「开发工具」的其他文章 »

Comments