2

当我从我的应用程序启动网页时,我试图获得与 Fiddler 相同类型的结果。下面是我正在使用的代码和我得到的结果。我仅以 google.com 为例。

我需要在我的代码中修改什么以获得我想要的结果,还是我需要一种完全不同的方法?

谢谢你的帮助。

我的代码:

 // create the HttpWebRequest object
        HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create("http://www.google.com");

        // get the response object which has the header info, using the GetResponse method
        var objResults = objRequest.GetResponse(); 

        // get the header count
        int intCount = objResults.Headers.Count;

        // loop through the results object
        for (int i = 0; i < intCount; i++)
        {
            string strKey = objResults.Headers.GetKey(i);
            string strValue = objResults.Headers.Get(i);


            lblResults.Text += strKey + "<br />" + strValue + "</br /><br />";
        }

我的结果:

Cache-Control 私有,max-age=0

内容类型文本/html;字符集=ISO-8859-1

日期 2012 年 6 月 5 日星期二 17:40:38 GMT

过期 -1

设置 Cookie PREF=ID=526197b0260fd361:FF=0:TM=1338918038:LM=1338918038:S=gefqgwkuzuPJlO3G; 过期=周四,2014 年 6 月 5 日 17:40:38 GMT;路径=/; 域=.google.com,NID=60=CJbpzMe6uTKf58ty7rysqUFTW6GnsQHZ-Uat_cFf1AuayffFtJoFQSIwT5oSQKqQp5PSIYoYtBf_8oSGh_Xsk1YtE7Z834Qwn0A4Sw3ruVCA9v3f_UDYH4b4fAloFJbW; 到期=格林威治标准时间 2012 年 12 月 5 日星期三 17:40:38;路径=/; 域=.google.com;HttpOnly

P3P CP="这不是 P3P 政策!有关详细信息,请参阅http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657。"

服务器 gws

X-XSS-保护1;模式=块

X-Frame-Options SAMEORIGIN

传输编码分块

========================== Fiddler 结果:

结果 协议 主机 URL 正文 缓存 内容类型 进程 注释 自定义

1 304 HTTP www.rolandgarros.com /images/misc/weather/P8.gif 0 max-age=700 到期时间:2012 年 6 月 5 日星期二 17:53:40 GMT image/gif firefox:5456
2200 HTTP www.google。 com / 23,697 私有,max-age=0 过期:-1 文本/html;charset=UTF-8 chrome:2324
3 304 HTTP www.rolandgarros.com /images/misc/weather/P9.gif 0 max-age=700 Expires: Tue, 05 Jun 2012 17:53:57 GMT image/gif firefox: 5456
4 200 HTTP 隧道到 translate.googleapis.com:443 0 chrome:2324
5 200 HTTP www.google.com

4

2 回答 2

3

不同之处在于 Fiddler 实际上记录的是整个会话,而不仅仅是单个 HTTP 请求。

如果用户加载 Google.com,则响应通常是一个 HTML 文档,其中包含图像、脚本文件、CSS 文件等。然后,您的浏览器将为这些资源中的每一个发起一个新的 HTTP 请求。在 Fiddler 运行时,它会跟踪每个 HTTP 请求并输出结果代码和有关会话的其他信息。

使用上面的 C# 代码,您只启动了一个 HTTP 请求,因此您只有关于单个结果的信息。

你最好写一个浏览器插件。否则,您必须解析 HTML 响应并从该文档加载其他资源。

如果您确实需要使用 C# 代码执行此操作,您可以使用HTML Agility Pack解析文档,然后在 HTML 中查找其他资源来模拟浏览器。还有嵌入式浏览器,例如Awesomium,可能会有所帮助。

于 2012-06-05T18:21:34.970 回答
0

您不是在要求 Fiddler 显示的相同信息。Fiddler 显示 HTTP 状态代码、主机和 URI 以及(从您的示例中显示)内容长度、内容类型和缓存状态。

对于其中许多,您将不得不查看响应标头。

于 2012-06-05T18:38:49.933 回答