我正在嘗試編寫一個捕獲HTTP獲取請求的程序。 我發現提琴手核心天才圖書館應該做我想要的。代理或FiddlerCore
的事情是,我試圖執行無效FiddlerApplication_BeforeRequest(會話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 我編輯了代碼,所以它會填補缺失的部分。
什麼是RequestCaptured? –
對不起,它是一個大量工作的事件:),我會在30分鐘後發佈額外的代碼。對不起 – Ran
什麼樣的工作?在請求可以繼續之前,工作是否需要完成?如果沒有,只需將事件數據放入隊列中並從處理程序返回......然後使用其他線程處理隊列。 – spender