How To Capture Data with FiddlerCore?

Ldg picture Ldg · Dec 5, 2012 · Viewed 9k times · Source

I'm developing a program in c# that will allow me to capture the requests made by the WebBrowser1.

My problem is that the "request data" is always empty. I don't understand where I have to put the "webBrowser1.Navigate" command.

For now my code is as follows.

private void button3_Click(object sender, EventArgs e)
{
    webBrowser1.ScriptErrorsSuppressed = true;
    WebProxy myProxy = new WebProxy();
    Uri newUri = new Uri("http://localhost:8888");
    myProxy.Address = newUri;

    Fiddler.FiddlerApplication.Startup(8888, false, false);

    List<Fiddler.Session> oAllSessions = new List<Fiddler.Session>();

    webBrowser1.Navigate("http://www.youtube.com/");
    while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
    {
        System.Windows.Forms.Application.DoEvents();
    }

    Fiddler.FiddlerApplication.BeforeRequest += delegate(Fiddler.Session oS)
    {
        Monitor.Enter(oAllSessions);
        oAllSessions.Add(oS);
        Monitor.Exit(oAllSessions);
    };

    var message = string.Join(Environment.NewLine, oAllSessions);
    MessageBox.Show(message);

    Fiddler.FiddlerApplication.Shutdown();

}

thanks for the help

Answer

EricLaw picture EricLaw · Dec 5, 2012

What "request data" are you referring to?

The core problem here is that you're calling Startup with a false parameter, indicating that Fiddler isn't becoming the proxy for ANY process at all, so you'll never see any data unless you directly send a HTTP request to that proxy instance.

If your goal is to capture traffic from this app and this app only, call

URLMonInterop.SetProxyInProcess("127.0.0.1:8888", "<-loopback>");

after you've started the proxy instance. This will set the current process' WinINET proxy setting to point at the FiddlerCore instance you've started.