我正在尝试编写一个捕获HTTP get请求的程序。 我发现Fiddler-core是一个天才库,应该完全符合我的要求。
问题是,我正在尝试在 void FiddlerApplication_BeforeRequest(Session oSession)中执行一大段代码工作,它似乎阻止了所有请求并且大大损害了我的冲浪速度。
我试图使用线程/任务但没有用。 我做错了什么?
这是我的代码:
public event RequestCapture RequestCaptured;
private CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
//...stat public function:
public void RunWatch() {
Fiddler.FiddlerApplication.BeforeRequest += FiddlerApplication_BeforeRequest;
Fiddler.FiddlerApplication.Startup(0, FiddlerCoreStartupFlags.Default);
}
void FiddlerApplication_BeforeRequest(Session oSession)
{
if (RequestCaptured != null)
{
CancellationToken ct = cancelTokenSource.Token;
Task.Factory.StartNew(() =>RequestCaptured(oSession.fullUrl), ct);
//Handle the event in a new thread, so the Listener will continue to listen
}
}
//close public function:
public void Close() {
try
{
FiddlerApplication.Shutdown();
cancelTokenSource.Cancel();
}
catch { }
}
现在我有不同的课程:
public Form1()
{
Listiner = new HttpWatcher.Listner();
Listiner.RequestCaptured += RequestCaptured;
Listiner.RunWatch();
}
void RequestCaptured(string url)
{
System.Threading.Thread.Sleep(10000);
}
修改 问题是:使用fiddler-core有更好的方法吗?还是我要为此构建一个简单的代理?用别的东西?谢谢!
EDIT2 我编辑了代码,因此它将填补缺失的部分。
答案 0 :(得分:2)
这里要明确的是,FiddlerCore在线程池线程上处理每个Session。如果您需要阻止行为,则无需启动其他线程或类似的东西。如果您不需要以阻塞方式处理事物,则可以随意将数据排入后台队列并使用任务或其他异步机制来执行处理。
当您说damage my surfing speed a great deal
时,您应该准确解释您的意思,以及在使用Fiddler而不是您的应用程序时是否看到不同的行为。