【问题标题】:Get html that is generated via AJAX in webclient在 webclient 中获取通过 AJAX 生成的 html
【发布时间】:2010-06-01 14:55:59
【问题描述】:

我经常去网站查找资料。我心想:“等一下。我会编程。为​​什么我可以编写一个可以为我编写程序的软件,我还要手动访问这个站点?”。

于是我开始了。我使用的是 C#,所以我找到了 WebClient 和 Uri。

我已经设法获得了该网站的源代码,但问题是我要查找的特定数据是在源代码加载后通过 AJAX 生成的。

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

【问题讨论】:

    标签: c# ajax httpwebrequest uri webclient


    【解决方案1】:

    一般的做法是这样的:

    1. 使用Fiddler 之类的工具,找出浏览器发出了哪些 HTTP 请求以获取您要查找的数据。
    2. 使用 WebClient 获取您需要的 HTTP 请求。

    请查看我对this question 的回复,了解有关 HTML 屏幕抓取的更多信息以及如何解决您可能遇到的各种问题。

    对于上面的#1,这里是如何使用 fiddler 来了解特定请求是如何发出的:

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

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

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

    【讨论】:

    • 我不太明白。 Fiddler 仅显示 1 个请求,即发送的 POST 请求。除此之外没有任何事情发生。我看不到如何请求数据,也没有出现标题?它应该是什么样子?
    • 我假设您正在谈论的 POST 实际上包含您尝试以编程方式获取的数据。如果是这样,我扩展了我的答案以包含有关如何使用 fiddler 查找正确请求、了解正在发送哪些标头以及查找需要哪些标头的更多详细信息。这是您要查找的信息吗?
    • 好的,我得到了我需要的东西。唯一仍然是个谜的是 CookieContainer 的事情。我查了一下,但大多数教程都是关于 ASP.NET 的。我为此使用了一个小型 C# 应用程序,而不是 ASP.NET
    • CookieContainer 是一个简单的类,它允许您存储来自一个请求的 cookie,然后在后续请求中将这些 cookie 发送出去——就像浏览器一样。无论您的客户端是 ASP.NET 还是 C# 控制台应用程序、WinForms 或任何其他客户端应用程序类型,CookieContainer 的工作方式都相同。
    猜你喜欢
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 2017-06-09
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多