【问题标题】:FiddlerCore generated http errorsFiddlerCore 生成 http 错误
【发布时间】:2014-01-30 13:22:53
【问题描述】:
我使用 FiddlerCore 作为我的代理框架。
当我浏览一个不存在的网站时(例如http://asdasd)
我得到了 fiddler 生成的 dns 查找失败页面 - [Fiddler] DNS lookup for "asdasd" failed. No such host is known
我希望它显示通常的浏览器错误,
有可能吗?
【问题讨论】:
标签:
c#
networking
proxy
fiddler
fiddlercore
【解决方案1】:
首先要理解的是,“通常的浏览器错误”一词具有误导性,因为浏览器中有两种情况。
- 用户直接连接到网络
- 用户使用任何类型的代理(例如 Fiddler、Squid 等)。
如果用户直接连接到网络,当 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);
}
}