Я использую FiddlerCore для захвата HTTP-трафика при выполнении тестов веб-интерфейса с Selenium (C #) ChromeDriver.Мне наконец удалось заставить его работать методом проб и ошибок, но мне нужна подсказка о том, почему мое решение работает, а логический способ (для меня) - нет.
Я настраиваю прокси-сервер Fiddler как:
CONFIG.IgnoreServerCertErrors = false;
FiddlerApplication.Prefs.SetBoolPref("fiddler.network.streaming.abortifclientaborts", true);
var startupSettings =
new FiddlerCoreStartupSettingsBuilder()
.ListenOnPort(0)
.DecryptSSL()
.OptimizeThreadPool()
.Build();
FiddlerApplication.Startup(startupSettings);
HttpPort = FiddlerApplication.oProxy.ListenPort;
FiddlerApplication.Log.LogFormat("Created HTTP endpoint listening on port {0}", HttpPort);
secureEndpoint = FiddlerApplication.CreateProxyEndpoint(HttpsPort, true, Host);
if (secureEndpoint != null)
{
HttpsPort = secureEndpoint.ListenPort;
FiddlerApplication.Log.LogFormat("Created secure endpoint listening on port {0}, using a HTTPS certificate for '{1}'",HttpsPort, Host);
}
CertMaker.trustRootCert();
Это в основном соответствует демонстрационному проекту, предоставленному для FiddlerCore.Обратите внимание, что прокси не зарегистрирован как системный прокси.
Затем ChromeDriver настраивается как:
var chromeDriverService = ChromeDriverService.CreateDefaultService();
chromeDriverService.HideCommandPromptWindow = true;
var options = new ChromeOptions();
options.Proxy = new Proxy()
{
HttpProxy = $"{SkicoProxy.Host}:{SkicoProxy.HttpPort}",
SslProxy = $"{SkicoProxy.Host}:{SkicoProxy.HttpPort}"
};
_driver = new ChromeDriver(chromeDriverService, options);
Что не работает, хотя я ожидаю, что это:
options.Proxy = new Proxy()
{
HttpProxy = $"{SkicoProxy.Host}:{SkicoProxy.HttpPort}",
SslProxy = $"{SkicoProxy.Host}:{SkicoProxy.HttpsPort}" // HTTPS PORT INSTEAD HTTP PORT
};
Тем не менее, если я не настрою конечную точку в Fiddler, веб-сайты SSL будут показаны как небезопасные в Chrome.
Почему трафик SSL не нужно маршрутизировать через соответствующую конечную точку и почемуэто даже работает, если это не прокси через безопасную оконечную точку?