我正在编写一个C#.NET 4.0应用程序,在该应用程序中,我将WebBrowser控件导航到安全网站,以编程方式输入凭据,然后导航到特定页面。我想捕获单击按钮产生的HTTPS请求和响应,如下所示:
NavigateControlToWebPage("https://fancyDancySite.com/fancyPage");
IHTMLElement btn = doc.getElementById("fancyDancyButton");
StartCapturingMyOwnHTTPSStuffWithFiddlerCore();
btn.click();
StopTheCapturing();
我基于Web上的一些示例以及使用SampleApp for FiddlerCore来解决这个问题。我根本无法破译如何做StartCapturing方法需要做的事情。我的代码目前是这样,但它没有成功:
WebProxy myProxy = new WebProxy();
Uri newUri = new Uri("https://localhost:8080");
myProxy.Address = newUri;
if (!Fiddler.CertMaker.rootCertExists())
{
if (!Fiddler.CertMaker.createRootCert())
{
throw new Exception("Unable to create cert for FiddlerCore.");
}
}
if (!Fiddler.CertMaker.rootCertIsTrusted())
{
if (!Fiddler.CertMaker.trustRootCert())
{
throw new Exception("Unable to install FiddlerCore's cert.");
}
}
Fiddler.FiddlerApplication.Startup(8080, Fiddler.FiddlerCoreStartupFlags.DecryptSSL);
Fiddler.FiddlerApplication.AfterSessionComplete += Fiddler_AfterSessionComplete;
ETA:我支持公司代理,试图访问外部https网站。
ETA:我有一些效果,因为web浏览器控件得到了一个"导航被取消"页面而不是通常的网站。但这不是我想要的效果:))
ETA:删除了我认为在这种情况下不合适的SetProxyInProcess
ETA:我目前的StartCapturing方法如下:
public void StartCapturingMyOwnHTTPSStuffWithFiddlerCore()
{
InstallCertificate();
FiddlerApplication.Startup(0, FiddlerCoreStartupFlags.Default);
FiddlerApplication.AfterSessionComplete += Fiddler_AfterSessionComplete;
}
这样可行,但当我添加& ~RegisterAsSystemProxy
时,它会停止工作。
答案 0 :(得分:0)
不需要WebProxy myProxy
的所有代码,因为这是用于为System.NET的HTTPWebRequests设置Web代理的代码,但Web浏览器控件不使用System.NET HTTP Stack,它使用WinINET的堆栈。
您设置的StartupFlags
是不够的;如果要捕获来自所有应用程序的流量,则应使用FiddlerCoreStartupFlags.Default
;如果计划使用SetProxyInProcess API来仅从当前应用程序获取流量,则应使用FiddlerCoreStartupFlags.Default & ~FiddlerCoreStartupFlags.RegisterAsSystemProxy
。
你需要非常小心你的“StopTheCapturing”代码是如何实现的,因为你很可能太早地调用它 - 单击Web浏览器控件中的按钮的调用几乎会立即返回,但Web浏览器控件可能会在之后的一段时间内执行操作。