WebRequest和WebResponse存在问题

完全的

成员
已加入
2012年10月24日
留言内容
14
编程经验
3-5
WebRequest和WebResponse存在问题

我编写了一个使用WebRequest和WebResponse来执行简单的Web搜寻器的C#程序。我发现了一些有关网站的信息。 IE和FireFox等Web浏览器提供了查看HTML源代码的功能。但是似乎发送到浏览器的html代码是一回事,而浏览器解释和显示的是另一回事。例如,如果您在IE中运行google搜索并在FireFox中运行相同的google搜索,则当您在IE中查看源代码时看到的内容将没有搜索结果中的超链接和内容,但是您可以看到在FireFox中查看源代码时,HTML超链接和搜索结果中的内容。所以我的问题是这个。您如何专门化WebRequest和WebResponse在浏览器处理之后而不是之前显示内容?

一种可能的解决方案可能是使用HttpWebRequest而不是WebRequest并使用UserAgent属性以某种方式诱使C#认为我正在使用Firefox浏览器。但这在我看来似乎并不合理。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,525
地点
悉尼,澳大利亚
编程经验
10+
首先,如果您使用HTTP发出请求,那么您已经在使用HttpWebRequest。 WebRequest类只是其他更特定类型的基础。 WebRequest.Create方法实际上将根据您提供的URL中的协议创建适当的类型。对Web服务器的请求将产生HttpWebRequest,对FTP服务器的请求将产生FtpWebRequest,依此类推。

至于模仿特定的浏览器,则没有任何区别。发送到每个浏览器的HTML通常大致相同,并且通常完全相同。当您查看源代码时,所看到的只是浏览器作者选择向您显示的内容。在某些情况下,您将看到已加载的原始页面的HTML,在某些情况下,您将看到当前显示的页面的HTML。至于在浏览器中查看源代码,第二个选项可能是两者中较好的一个,但这并不意味着HTML实际上是从Web服务器接收的。当前正在查看页面时生成页面的HTML代码很可能是原始页面已加载并执行某些脚本的结果。这些脚本可能包括一些文档加载,对控件引发的事件的处理,从AJAX调用接收到的JSON数据的集成等。当前正在浏览的页面是由浏览器从所有这些输入中构造的。

假装您的请求来自特定的浏览器将不会神奇地创建该输出,因为产生输出的是浏览器而不是服务器。如果没有浏览器来执行此操作,则必须自己执行。您将必须构建一个引擎来解析页面并加载链接的脚本文件,解析脚本并执行它并进行其他AJAX调用。基本上,您将构建一个浏览器引擎。
 

完全的

成员
已加入
2012年10月24日
留言内容
14
编程经验
3-5
明确一点,我的目标是以编程方式从Google搜索中获取搜索结果。

在仔细查看了IE和firefox的不同html源并看到它们开始有所不同的点之后,我可以得出结论,正在发生的事情是firefox在浏览器运行javascript之前显示了html,而IE显示了在浏览器处理完javascript之后生成的html。

我想如果我接受您的建议并使用WebRequest.Create方法,但是我知道的问题是这个。如何将创建WebRequest的愿望发送给此方法,以便将可见性设置为hidden。我相信其中可能是完成此任务的关键。似乎javascript处理了IE中的html,因为未隐藏可见性。
 
最佳 底部