获取通过webclient中的AJAX生成的html

时间:2010-06-01 14:55:59

标签: c# ajax httpwebrequest uri webclient

我经常去一个网站看东西。我心想:“等等。我可以编程。为什么我可以手动编写一个软件来手动访问这个网站?”。

所以我开始了。我正在使用C#,所以我找到了WebClient和Uri。

我已经设法获取该网站的源代码,但问题是我在寻找的具体数据是在源代码加载后通过AJAX生成的。

这就是我的问题。如果需要首先通过AJAX调用请求代码,我该如何获得该代码?

1 个答案:

答案 0 :(得分:2)

一般方法是:

  1. 使用Fiddler之类的工具,找出浏览器发出的HTTP请求,以便获取您正在查找的数据。
  2. 使用WebClient来获取您需要的HTTP请求。
  3. 请查看我对this question的回答,了解有关HTML屏幕抓取的详细信息,以获取更多详细信息以及如何解决可能遇到的各种问题。

    对于上面的#1,以下是如何使用fiddler来了解特定请求的执行方式:

    首先,找到您关心的请求(包含您在响应中需要的数据的请求)。您可以通过在fiddler的左窗格中双击它并查看右下方窗格中的“text fiew”选项卡来检查每个请求来执行此操作。您还可以使用CTRL + F查找多个请求中的内容,但某些请求已被压缩,因此您需要确保在发出请求之前在工具栏中选择“自动编码”按钮,如果您想确定可以发送文本 - 搜索所有这些。

    找到所需的请求后,在Fiddler中双击它,然后在右上方的窗格中选择“标题”标签。这些是发送的标题。如果您的客户端将这些标头正好发送到服务器,您应该返回相同的数据。但通常不需要所有标题,因此您需要确定需要哪些标题。您可以使用右上方窗格中的Fiddler的Request Builder选项卡执行此操作。选择该选项卡,然后将数据请求从左窗格拖到请求构建器上。然后提交请求以验证它是否返回正确的结果。然后开始一次删除标题,一个标题,直到请求停止工作 - 您知道该标题是必需的。尝试删除每个标题,直到找到所需的标题。

    然后,您需要编写代码来生成正确的标头。不要担心为您自动生成的Host:标题。对于Cookie:标头,您需要使用CookieContainer类生成它。对于其他标题(例如UserAgent:,接受:等等,您通常可以复制它们并按原样将它们添加到您的请求中。