我正在编写一个程序来捕获HTTP请求。我找到了Fiddler核心,一个天才图书馆,应该做我想做的。
问题是,我试图在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);
}编辑的问题是:是否有更好的方法使用小提琴核心?还是我要为此建立一个简单的代理呢?用别的东西?谢谢!
edit2我已经编辑了代码,这样它就可以填充缺失的部分。
发布于 2014-06-21 17:32:59
为了澄清这一点,FiddlerCore在线程池线程上处理每个会话。如果您需要阻塞行为,就不需要额外的线程或诸如此类的东西。如果不需要以阻塞方式处理数据,那么可以在后台队列上对数据进行排队,并使用任务或其他异步机制来执行处理。
当您说damage my surfing speed a great deal时,您应该确切地解释您的意思,以及在使用Fiddler而不是您的应用程序时,您是否看到了不同的行为。
https://stackoverflow.com/questions/24330403
复制相似问题