2012-12-05 30 views
5

Opracowuję program w języku C#, który pozwoli mi przechwytywać żądania wykonane przez WebBrowser1.Jak przechwytywać dane za pomocą FiddlerCore?

Mój problem polega na tym, że "dane żądania" są zawsze puste. Nie rozumiem, gdzie muszę umieścić polecenie "webBrowser1.Navigate".

Na razie mój kod jest następujący.

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

} 

dzięki za pomoc

+0

Jaki jest twój konkretny problem? – Blorgbeard

+0

Witam, moim problemem jest to, że "dane żądania" są zawsze puste. Nie rozumiem, gdzie muszę umieścić polecenie "webBrowser1.Navigate". Jeszcze raz dziękuję – Ldg

Odpowiedz

3

Do jakich "danych żądania" się odwołujesz?

Podstawowym problemem jest to, że dzwonisz Uruchomienie z fałszywego parametru, wskazując, że Skrzypek nie staje proxy dla dowolnego procesu w ogóle, więc nigdy nie zobaczysz żadnych danych, chyba że bezpośrednio wyślij żądanie HTTP do tej instancji proxy.

Jeśli twoim celem jest, aby uchwycić ruch z tej aplikacji i tylko tej aplikacji, zadzwoń

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

po tym, jak rozpoczął wystąpienie proxy. Spowoduje to ustawienie bieżącego procesu "Ustawienie proxy WinINET tak, aby wskazywało na instancję FiddlerCore, która została uruchomiona.

+0

Teraz działa! Dziękuję bardzo za odpowiedź! ta linia uratuj mnie! URLMonInterop.SetProxyInProcess ("127.0.0.1:8888", "<-loopback>"); – Ldg

0

Jestem zgadywania, ale myślę, że trzeba ponownie zorganizować swój kod tak, aby skonfigurować Skrzypek przed Państwo złożyć zamówienie:

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(); 
} 
+0

witam! dziękuję za odpowiedź, ale nawet przeorganizowanie kodu nadal nie działa, dziwne jest to, że jeśli otworzę skrzypce2 są żądania, ale jeśli wskażę moją aplikację jako filtr, również fiddler2 nie otrzyma żądania! Jeszcze raz dziękuję! – Ldg

+0

ok, teraz działa aplikacja fiddler2, ale w C# nic nie można zrobić! – Ldg