在C#应用程序中使用FiddlerCore捕获应用程序本身引发的单个HTTPS请求和响应

时间:2016-10-05 20:10:15

标签: https fiddlercore

我正在编写一个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时,它会停止工作。

1 个答案:

答案 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浏览器控件可能会在之后的一段时间内执行操作。