Fiddler 经常忽略本地主机上的一些 Http 流量。 Fiddler 或 Selenium 代理设置?

Fiddler often ignoring some Http traffic on localhost. Fiddler or Selenium Proxy settings?

我正在使用 Fiddler 监控来自我的 selenium 实例的流量。

我正在使用以下代码通过 Fiddler.Core

启动 Fiddler
static void StartProxy()
{
    FiddlerApplication.Shutdown();
    FiddlerApplication.AfterSessionComplete += FiddlerApplication_AfterSessionComplete;
    FiddlerApplication.Startup(8888, FiddlerCoreStartupFlags.DecryptSSL);
}

我正在启动 Selenium 以通过以下方式使用代理:

StartProxy();

var seleniumProxy = new Proxy { HttpProxy = "localhost:8888", SslProxy = "localhost:8888" };
var chromeOptions = new ChromeOptions { Proxy = seleniumProxy };

var path = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + "\ChromeDriver\";
var chromeService = ChromeDriverService.CreateDefaultService(path);

var driver = new ChromeDriver(chromeService, chromeOptions);

Selenium 然后将导航到我的网页,Fiddler 将收集 HTTP 请求。大多数数据总是会通过(例如 HTML 的 GET),但是我想用 Fiddler 收集的数据(页面更新)只是在某些时候收集(它曾经非常一致但现在它很少起作用了)。

我读到 here and here 如果代理设置在本地主机上,浏览器可以忽略代理。

我尝试将此行更改为机器名称和 IP 地址,但没有成功,Chrome 将启动并为每个显示 "Unable to connect to proxy server"。我也试过每一个都在前面加上"http://"。

// Original
var seleniumProxy = new Proxy { HttpProxy = "localhost:8888", SslProxy = "localhost:8888" }; 

// "Dot Trick"
var seleniumProxy = new Proxy { HttpProxy = "localhost.:8888", SslProxy = "localhost.:8888" }; 
// With this line, chrome will start and connect to proxy server but it will still not get the traffic I want consistently.

// IP Address
var seleniumProxy = new Proxy { HttpProxy = "192.168.1.5:8888", SslProxy = "192.168.1.5:8888" }; 

// Machine Name
var seleniumProxy = new Proxy { HttpProxy = "machine_name:8888", SslProxy = "machine_name:8888" }; 

我确定这是在启动 Fiddler,因为如果我尝试 运行 Fiddler 桌面应用程序,我会得到 "Port 8888 is already in use..."。

是否有一些用于启动代理的设置(我的 StartProxy()),如果不是默认设置,您必须在其中指定终点 "localhost"?

感谢您的帮助。

你问的不是很清楚。

Chrome向FiddlerCore发送请求没有问题;您不需要任何特殊步骤。

您的 StartProxy 方法根本不应调用 Shutdown。

您正在使用 AfterSessionComplete,这意味着您只会在流量完成后才接到电话;如果出现延误,您可能要等很久以后才能看到路况。

您在代码的哪个位置清除了浏览器的缓存,以确保它始终从网络(以及 FiddlerCore)中提取,而不是从 Web 浏览器的缓存中提取?