2014-01-30 47 views
0

我使用FiddlerCore作爲我的代理框架。FiddlerCore生成http錯誤

當我在網上衝浪到一個不存在的網站(如http://asdasd) 我獲得DNS查找失敗的提琴手生成的頁面 - [Fiddler] DNS lookup for "asdasd" failed. No such host is known

我希望它目前通常瀏覽器錯誤, 是有可能嗎?

回答

1

首先要理解的是,術語「通常的瀏覽器錯誤」是誤導性的,因爲瀏覽器中有兩種情況。

  1. 用戶直接連接到web
  2. 用戶是後面的任何種類的代理(例如提琴手,魷魚,等)。

如果用戶直接連接到Web,當DNS查找或連接失敗時,瀏覽器本身會生成各種錯誤頁面。

如果瀏覽器位於代理之後,則代理必須生成錯誤頁面並將其返回給客戶端。如果需要,它可以嘗試模仿瀏覽器的錯誤頁面,但這需要每個客戶端都有不同的邏輯。

可以,但是,重寫FiddlerCore的默認錯誤響應與您自己選擇。

首先,將委託:

FiddlerApplication.BeforeReturningError += FiddlerApplication_BeforeReturningError;

然後,添加代碼來生成一個新的錯誤響應:

private void FiddlerApplication_BeforeReturningError(Session oSession) { 
if (oSession.bHasResponse) { 
    string sTitle = "Unable to load page"; 
    string sOriginalMessage = oSession.GetResponseBodyAsString().Trim().Replace("[Fiddler] ", String.Empty); 
    oSession.oResponse["Content-Type"] = "text/html; charset=utf-8"; 
    oSession.oResponse["Cache-Control"] = "max-age=0, must-revalidate"; 
    string sEnhancedError = 
    String.Format("<!doctype html><html><head><title>{0}</title>\r\n<style>" + 
    "body {{ background-color: #CCDDDD; font-family: sans-serif }}\r\npre {{ max-width:600px; white-space:pre-wrap;}}\r\n" + 
    "</style></head>\r\n<body><h1>MyProxy - Page Unavailable</h1>The specified resource could not be loaded.<br /><pre>{1}</pre></body></html>", sTitle, sOriginalMessage); 

    oSession.utilSetResponseBody(sEnhancedError); 
    } 
} 
+0

謝謝!現在很明顯:-) –