c# - 使用 C# 通过更改源代码有效地从网页中提取数据?

标签 c# http web system.net

我已经使用 System.net.Webclient 类将代码放在一起,从网页中提取源代码,然后使用字符串搜索来获取特定信息。这本身工作正常,但我的问题是源代码每隔几秒更改一次,我希望收到的数据相应更改。我知道我可以简单地设置一个循环来重复这个过程,但不幸的是我当前的代码需要整整 2.7 秒才能完成,我想避免这个大的延迟时间。此外,如果可能的话,我想避免向网页发送垃圾邮件。我在考虑一个保持打开状态的流读取,这样就不必发送多个请求,但我不完全确定如何去做......

总而言之,有没有一种方法可以使用 System.Net 命名空间以既快速又避免向网站发送垃圾请求的方式从网站提取更新信息?

最佳答案

恐怕HTTP协议(protocol)不适应你的实时数据刷新要求。除了定期轮询 HTTP 请求之外,您无法知道服务器上的数据是否发生变化并获取这些新数据。

例如 WebSocket技术更适合这些场景。当然,数据提供者必须实现它,以便客户可以订阅此实时提要。

还有另一种方法可以通过 HTTP 协议(protocol)实现此功能。它使用 iframe 来实现 long polling .这是一个 example .这个想法是服务器使用分块传输编码并将连续的数据流发送到套接字。客户端订阅此流,并能够收到服务器上发生的更改的通知。再次重申,这是一项必须由服务器端实现的技术,这样作为客户端的您才能利用它。

如果服务器提供的所有数据都是通过 HTML 页面提供的数据,那么您注定要通过向该服务器发送 HTTP 请求来进行屏幕抓取,直到您的 IP 地址被列入黑名单并拒绝访问。

关于c# - 使用 C# 通过更改源代码有效地从网页中提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11056133/

相关文章:

C#反序列化动态JSON

c# - 线程 : Locking Under the hood of

ios - https 请求适用于 chrome 但不适用于 iOS 应用程序

python - 在 CherryPy 中检查每个页面加载时的登录状态

c# - Linq - 从表达式 <T2> 创建表达式 <T1>

c# - FutureAccessList 用法混淆

http - 使用旧代理的自定义 HTTP header

api - Flutter Http 内容类型

java - 如何公开本地部署的Web服务

javascript - Webfont 性能 - webfontloader 与预加载