我正在用c#开发一个程序,它允许我捕获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();
}
感谢您的帮助
答案 0 :(得分:3)
您指的是“请求数据”?
这里的核心问题是您使用 false 参数调用启动,表明Fiddler根本没有成为任何进程的代理,所以你除非您直接向该代理实例发送HTTP请求,否则永远不会看到任何数据。
如果您的目标是仅从此应用和此应用获取流量,请致电
URLMonInterop.SetProxyInProcess("127.0.0.1:8888", "<-loopback>");
启动代理实例后。这会将当前进程的'WinINET代理设置设置为指向您已启动的FiddlerCore实例。
答案 1 :(得分:0)
我猜,但我认为您需要重新安排代码,以便在提出请求之前设置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();
}