65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET Maui、Android 模拟器、Fiddler – 仅监控模拟器流量

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2024年9月14日

CPOL

6分钟阅读

viewsIcon

1115

.NET MAUI、REST API、Android 和 Fiddler:关于 Fiddler 使用的见解,如何配置开发环境以使用 Fiddler 仅监控来自 Android 模拟器的流量,并利用 Fiddler 更深入地了解您正在使用的 API。

.NET MAUI、REST API、Android 和 Fiddler:关于 Fiddler 使用的见解

如何配置开发环境以使用 Fiddler 仅监控来自 Android 模拟器的流量,并利用 Fiddler 更深入地了解您正在使用的 API。

Fiddler 是一款网络流量监控工具,有两个版本:Classic(免费且不再受支持)和 Everywhere(付费,功能更多),它已成为我移动开发的日常工具。 

在使用 .NET Maui 和 REST API 构建移动应用时,它帮助我弥补了 API 文档的不足,并让我能看到应用实际是如何使用这些 API 的。

我的移动应用使用了 OpenLibrary.org,这是一个开源项目,提供了一套 Web API 来访问其丰富的图书和资料库。虽然 OpenLibrary 团队提供了可靠的文档,但有时可能有些稀疏。为了弥补这些不足,我将演示如何将 Fiddler 与 .NET MAUI 应用结合使用,以更好地理解和集成这些 REST API。

所讨论的应用程序是一个 .NET MAUI 移动应用,设计用于在 Android 和 iOS 上运行。要在应用运行时监控 REST API 调用,您需要在您的 Android 设备或模拟器上正确设置 Fiddler。Fiddler 为此设置提供了出色的文档,您可以在这里找到1。 您可能还想配置 Fiddler 来监控由提供商托管的 Web 应用的流量,以帮助理解他们正在使用的 API 以及他们如何使用这些 API,从而更深入地了解可用的功能。

按照上述 Fiddler 的基本说明操作后,我进行了一些额外的配置。

  • 在我的情况下,我需要**禁用**模拟器中的**蜂窝网络**功能,确保它只模拟 Wi-Fi 访问,而不是蜂窝数据。所配置的代理是通过 Wi-Fi 接口配置的,因此您希望模拟器仅使用 Wi-Fi,以便捕获来自设备的流量。
  •  在 Windows 11 网络局域网设置中,关闭**自动代理检测**。我这样做是因为当 Fiddler 启动时,Windows 检测到了代理服务,我的一些网络连接停止工作,特别是 Visual Studio GitHub Copilot 似乎被代理卡住了。这也阻止了 Fiddler 监控我笔记本电脑的网络流量,这是一个我期望的副作用。
  • 在 Fiddler 中,我还设置了过滤器,只监控来自模拟器进程的流量,并过滤掉了一些只是噪音的常规网络调用。

以下是我用来为 Android 模拟器配置 Fiddler 的说明,这些说明来自 Bing Copilot。它与上面 Fiddler 文档中的链接几乎完全相同,另外还有一些我做的额外配置。

    1. 安装 Fiddler Classic:
    2. 从官方网站下载并安装 Fiddler Classic。
  1. 配置 Fiddler Classic:
    • 打开 Fiddler,然后转到 **Tools > Options > Connections**(工具 > 选项 > 连接)。
    • 勾选 **Allow remote computers to connect**(允许远程计算机连接)复选框。
    • 记下端口号(默认为 8888)。
    • 重启 Fiddler 以应用更改。
  2. 查找您的 IP 地址:
    • 将鼠标悬停在 Fiddler 右上角的 **Online**(在线)指示器上,即可看到您的 IP 地址。
  3. 配置 Android 模拟器:
    • 从 Visual Studio 启动您的 Android 模拟器。
    • 在模拟器中,进入 **Settings > Wi-Fi**(设置 > Wi-Fi)。
    • 长按已连接的网络(通常是“Wired eth1”),然后选择 **Modify Network**(修改网络)。
    • 启用 **Show advanced options**(显示高级选项)。
    • 将 **Proxy**(代理)设置为 **Manual**(手动)。
    • 输入您的 IP 地址和端口号(8888)。
    • 注意:如果您在不同的工作地点之间移动,您的 IP 地址可能会改变,需要在此处更新。
  4. 安装 Fiddler 根证书:
    • 打开模拟器的浏览器,并访问 http://ipv4.fiddler:8888/
    • 下载并安装 Fiddler 根证书。
    • 按照提示将证书安装到系统账户中。
  5. 关闭蜂窝数据
    • 打开模拟器设置,导航至“网络和互联网 / 互联网 /”,然后点击移动提供商旁边的齿轮图标。
    • 点击滑块以关闭“使用此 SIM 卡”。
    • 我遇到过一两次,由于某些奇怪的原因无法关闭 SIM 卡。在这种情况下,我会关闭移动数据,这样就会强制流量通过 Wi-Fi 和代理。
  6. 关闭笔记本电脑局域网设置的自动检测功能
    • 导航至“控制面板 / 网络和 Internet /”,点击“Internet 选项”/ 点击“连接”选项卡 / 点击“局域网设置”按钮。
    • 取消勾选“自动检测设置”。
  7. 在 Fiddler 中设置过滤器
    • 在 Fiddler 中,点击过滤器图标,我设置了过滤器来移除一些噪音条目。请注意,此时您实际上不必打开“文件”菜单下的“捕获流量”来监控来自模拟器的流量。模拟器上的代理将信息直接转发给 Fiddler,因此不需要捕获流量,因为“捕获流量”会监控您笔记本电脑上的网络流量。
    • 您还可以将流量过滤到特定进程,在某些情况下您可能会发现这很有用。
    • 例如:我目前正在研究 openlibrary.org 网站,试图弄清楚他们的 API。我通常在 Edge 浏览器中打开 25 个或更多的标签页,幸运的是,当标签页处于休眠状态时,其标题不会显示在下拉列表中。这样就很容易找到我想要监控流量的标签页。然后我可以在该进程上进行过滤,选择“文件”>“捕获流量”,现在我就能监控来自模拟器和我感兴趣的那个网站的流量了。
  8. 捕获流量:
    • 现在我已经将模拟器设置为转发到 Fiddler,并将过滤器设置为只监控我感兴趣的一个浏览器标签页的流量。我可以启动“文件/捕获流量”,看看我的应用程序和它正在交互的网站上发生了什么。
    • 在模拟器中启动您想要测试的应用程序。
  9. 以下是几个使用 Fiddler 的例子。
    1. OpenLibrary.org 没有一个公开的 API 来更新某人书架上一本书的阅读状态。你可以将一本书设置为“想读”、“在读”或“已读”。我正在构建的移动应用也希望能够做到同样的事情。为了弄清楚如何调用 openlibrary.org 的 API 来实现这个功能,我在 openlibrary.org 的网页浏览器中执行了这些步骤并更新了一本书。
    2. 通过查看流量,你可以找出那个设置书籍状态的多部分表单提交(multi part form post)。
    3. 然后在编写代码执行相同的 POST 请求时,你可以查看你的应用实际发送的内容,并与有效的内容进行比较,然后进行调整。这里,我运行我的应用,找到了尝试设置书籍阅读日期的 POST 请求。在右侧窗口中点击该请求,有几种查看该请求的方式。我喜欢原始视图(raw view)。
      • 例如,这是我最初几次尝试设置书籍阅读日期的请求之一。我能够看到代码使用了 \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}”

希望这能提供一些关于如何利用 Fiddler 来帮助填补您正在集成的 Web 应用程序的空白,以及如何通过精确跟踪正在调用的 API 及其内容来排查您自己应用程序问题的见解。

 

 

© . All rights reserved.