从特定进程捕获流量的 Fiddler 在 Chrome 后停止工作

Fiddler capturing traffic from a specific process stopped working in Chrome

  1. 打开 Chrome 并导航到 google.com
  2. 在 Fiddler 中使用 "Any Process" 按钮到 select 那个 Chrome 选项卡
  3. 在 Fiddler 中,"Any Process" 按钮变为 "chrome: 11788"
  4. 在 Chrome 选项卡中搜索内容

我希望 Fiddler 捕获流量,但未显示任何会话。如果我使用 "Any Process",将从所有应用程序捕获流量。

“过滤器”选项卡中的 "Use Filters" 复选框未选中。

我卸载并重新安装了 Fiddler。

我安装了最新版本。

我还能做什么?

Google Chrome 的现代版本使用单独的流程来发出请求;因此 'Any Process' 工具检测到的主进程 window 是不同的。

团队正在考虑修复,但目前尚未实施,请参阅 "Target Any Process" feature no longer working with Chrome

同时可能的解决方法是:

  • 使用其他过滤功能 - 例如捕获来自 Chrome 的请求,然后从 Sessions 视图中选择 right click -> Filter now -> Show only process=<process number>.

  • 过滤其他所有内容。在 Fiddler 中,取消选中 Tools -> Options -> Connections -> Act as system proxy on startup。然后用手动指定的代理设置启动Chrome,指向Fiddler监听的端口:

    chrome --proxy-server=http://localhost:8888
    

    这样, 捕获的流量将来自此 Chrome 实例。

详细版: Why Fiddler's Process Picker tool doesn't work with Chrome anymore

简要版本: 出于安全和性能原因 Chrome 现在通过单独的 网络服务 处理网络请求。因此,当您将 Fiddler 的“Any Process”工具指向任何 Chrome window/tab 时,您实际上是在指向到 Chrome 浏览器的 UI(浏览器进程)。

对此有一个快速解决方法:

  1. 在 Chrome 浏览器中导航到 chrome://flags/#network-service-in-process。您会看到 Runs network service in-process 并且其值将设置为 Default.
  2. 将值从 默认 更改为 启用。通过这样做,您告诉 Chrome 处理来自浏览器进程的网络请求,该进程还处理 UI.
  3. 重启Chrome。您现在应该能够通过指向任何 Chrome 选项卡上的 Any Process 工具来捕获网络请求。

完成开发活动后,请不要忘记将标志设置回默认值。这将提供更好的性能。

注意: 在撰写本文时,我使用的是 Chrome 84.