Как собирать данные с помощью FiddlerCore?

Я разрабатываю программу на С#, которая позволит мне фиксировать запросы, сделанные WebBrowser1.

Моя проблема в том, что «данные запроса» всегда пусты. Я не понимаю, где я должен поместить команду "webBrowser1.Navigate".

На данный момент мой код выглядит следующим образом.

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();

}

Спасибо за помощь


person Ldg    schedule 05.12.2012    source источник
comment
Какова ваша конкретная проблема?   -  person Blorgbeard    schedule 05.12.2012
comment
Привет, моя проблема в том, что данные запроса всегда пусты. Я не понимаю, где я должен поместить команду webBrowser1.Navigate. Спасибо еще раз   -  person Ldg    schedule 05.12.2012


Ответы (2)


Какие "данные запроса" вы имеете в виду?

Основная проблема здесь заключается в том, что вы вызываете Startup с параметром false, указывающим, что Fiddler вообще не становится прокси-сервером для ЛЮБОГО процесса, поэтому вы никогда не видеть какие-либо данные, если только вы напрямую не отправите HTTP-запрос этому экземпляру прокси.

Если ваша цель — перехватить трафик из этого приложения и только из этого приложения, позвоните по телефону

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

после того, как вы запустили экземпляр прокси. Это установит параметр прокси-сервера WinINET для текущего процесса так, чтобы он указывал на запущенный вами экземпляр FiddlerCore.

person EricLaw    schedule 05.12.2012
comment
В настоящее время работает! Большое спасибо за ответ! эта строчка спаси меня! URLMonInterop.SetProxyInProcess(127.0.0.1:8888, ‹-loopback›); - person Ldg; 06.12.2012

Я предполагаю, но я думаю, вам нужно перестроить свой код, чтобы вы настроили fiddler до того, как вы сделаете запрос:

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

webBrowser1.Navigate("http://www.youtube.com/");
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
    System.Windows.Forms.Application.DoEvents();
}
person Blorgbeard    schedule 05.12.2012
comment
Привет! спасибо за ответ, но даже перестановка кода все равно не работает, странно то, что если я открываю fiddler2 есть запросы, но если я указываю свое приложение как фильтр, также fiddler2 не получает запросов! Еще раз спасибо! - person Ldg; 05.12.2012