在移动应用开发领域,了解和监控应用程序如何与后端 API 交互至关重要。Fiddler 是一个网络流量监控工具,它可以帮助开发者深入了解 API 的使用情况。本文将介绍如何设置 Fiddler 以监控 Android 模拟器的网络流量,并使用 Fiddler 来更好地理解和集成 REST API。
Fiddler 提供了两个版本:Classic(免费但不再支持)和 Everywhere(付费,功能更丰富)。对于移动开发来说,Fiddler 成为了日常开发中不可或缺的工具。本文以 .NET MAUI 移动应用为例,展示如何利用 Fiddler 来监控和理解应用程序实际使用的 API。
本文介绍的移动应用是一个设计用于 Android 和 iOS 平台的 .NET MAUI 应用。为了在应用运行时监控 REST API 调用,需要在 Android 设备或模拟器上正确设置 Fiddler。Fiddler 提供了详细的文档说明如何进行设置,可以在这里找到相关文档。
在使用场景中,需要禁用模拟器的蜂窝网络功能,确保它仅模拟 Wi-Fi 访问,而不是蜂窝数据。配置的代理是通过 Wi-Fi 接口设置的,因此需要让模拟器仅使用 Wi-Fi,以便捕获设备上的流量。
Windows 11 网络 LAN 设置关闭了自动代理检测。这样做是因为当 Fiddler 启动时,Windows 会检测到代理服务,导致一些网络连接停止工作,特别是 Visual Studio 和 GitHub Copilot 在代理中受到干扰。这也阻止了 Fiddler 监控笔记本电脑的网络流量,这是一个期望的副作用。
在 Fiddler 中,还设置了过滤器,仅监控来自模拟器进程的流量,并过滤掉了一些只是噪声的常规网络调用。
以下是用来为 Android 模拟器配置 Fiddler 的步骤,这些步骤与 Fiddler 文档中的链接几乎相同,同时包含了所做的一些额外配置:
1. 安装 Fiddler Classic:
从官方网站下载并安装 Fiddler Classic。
2. 配置 Fiddler Classic:
打开 Fiddler 并转到 Tools > Options > Connections。
勾选 Allow remote computers to connect。
注意端口号(默认是 8888)。
重启 Fiddler 以应用更改。
3. 查找 IP 地址:
将鼠标悬停在 Fiddler 右上角的 Online 指示器上,查看 IP 地址。
4. 配置 Android 模拟器:
从 Visual Studio 启动 Android 模拟器。
在模拟器中,转到 Settings > Wi-Fi。
长按连接的网络(通常是 "Wired eth1")并选择 Modify Network。
启用 Show advanced options。
将 Proxy 设置为 Manual。
输入 IP 地址和端口号(8888)。
5. 安装 Fiddler 根证书:
打开模拟器的浏览器,导航到 http://ipv4.fiddler:8888/。
下载并安装 Fiddler 根证书。
按照提示将证书安装到系统帐户中。
6. 关闭蜂窝数据:
打开模拟器设置,导航到网络与互联网 / 互联网 / 然后点击移动提供商的齿轮图标。
点击滑块关闭使用此 SIM。
7. 关闭笔记本电脑 LAN 设置自动检测:
导航到控制面板/网络和 Internet / 单击 Internet 选项 / 单击连接选项卡 / 单击 LAN 设置按钮
取消选中自动检测。
在 Fiddler 中设置过滤器,设置了过滤器以移除一些噪声条目。注意,不必在 File 菜单下实际打开 Capture Traffic 来监控模拟器的流量。此时,模拟器上的代理直接将信息转发到 Fiddler,而捕获流量是在查看笔记本电脑上的网络流量。
还可以过滤特定进程的流量,这在某些情况下可能会有所帮助。例如:目前正在工作的 openlibrary.org 网站。弄清楚他们的 API。通常在 Edge 中打开 25 个或更多的标签页,幸运的是,当标签页处于休眠状态时,标签的标题不会出现在下拉列表中。这样很容易找到想要监控流量的标签页。然后,可以对该进程进行过滤,并选择 File Capture Traffic,现在可以监控来自模拟器和所感兴趣的一个网站的流量。
现在已经设置好模拟器转发到 Fiddler,并且设置了过滤器来监控感兴趣的一个浏览器标签页的流量。可以开始 File/Capture Traffic,并查看应用程序和它正在交互的网站的所有情况。
启动想要在模拟器中测试的应用程序。以下是使用 Fiddler 的一些示例。openlibrary.org 没有记录更新某人书架上书籍阅读状态的 API。可以将一本书设置为想要阅读、正在阅读、已经阅读。正在构建的移动应用希望能够做到同样的事情。为了弄清楚如何向 openlibrary.org 发出 API 调用以实现这一点,在 openlibrary.org 的网络浏览器中执行了步骤并更新了一本书。
例如,这是第一次尝试设置书籍阅读日期的数据。可以看到代码使用了 \u0002 作为双引号。当最终需要 JSON 看起来像这样:
{“event_type”:2,”year”:2018,”month”:5,”day”:18,”event_id”:null}
POST
https://openlibrary.org/works/OL20643179W/check-ins HTTP/1.1
Content-Type: application/json; charset=utf-8
Cookie: pd=; session=/people/mynextbook%2C2024-09-06T14%3A56%3A52%2C04338%248a8ba7b97c5c121f24604a0332e40cc1
User-Agent: Dalvik/2.1.0 (Linux; U; Android 15; sdk_gphone64_x86_64 Build/AP31.240517.022)
Host: openlibrary.org
Connection: Keep-Alive
Accept-Encoding: gzip
Content-Length: 124
“{\u0022event_type\u0022: 2, \u0022year\u0022: 2018, \u0022month\u0022: 5, \u0022day\u0022: 18, \u0022event_id\u0022: null}”