在没有公共 API 的情况下连接到网站 webosocket

Posted

技术标签:

【中文标题】在没有公共 API 的情况下连接到网站 webosocket【英文标题】:Connecting to website webosocket without public API 【发布时间】:2018-03-11 10:43:12 【问题描述】:

我对 websockets 了解不多,但我知道如何连接到这样的东西:

const CHAT_URL = 'ws://echo.websocket.org/';

但是当网站没有公共 websocket API 时该怎么办?我怎样才能得到这些数据?

假设我们有这样的网站: 当我打开开发工具、网络选项卡并选择 WS 和 FRAMES 时,我可以每毫秒看到新数据。是否可以在我的节点或角度项目中获取该数据?

在图片中,您可以看到它在 chrome 开发工具中的样子。

【问题讨论】:

【参考方案1】:

一切皆有可能,尽管您需要做一些工作来逐个确定每个 API 的实现。另请检查使用他们的 API 是否违反网站政策等。

cryptopia.co.nz 为例,如果我们检查 WebSocket 请求的 URL,我们会看到它们使用 ASP.NET 的 signalr 库作为后端。我们还可以在查询字符串中看到 connectionToken 正在传递,这意味着如果我们要成功连接到他们的 API,我们需要提供一个有效的 connectionToken

查看signalr、we see that 的文档,他们实施了一些安全措施,包括防止跨域请求。这排除了我们直接从浏览器客户端(即通过 Angular)连接到 API 的能力。此时我们唯一的选择是从 Node.js 连接到他们的 WebSocket API,然后将数据代理到我们自己的浏览器客户端。

你可以看到这正在变成一个相当深的兔子洞。另一个问题是,如果他们在任何时候改变了他们的实现,你的应用程序就会崩溃。总之,很可能通过足够的努力连接到私有 API,但如果它首先可用,我总是会寻找公共 API 选项。

【讨论】:

以上是关于在没有公共 API 的情况下连接到网站 webosocket的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有认证问题的情况下连接到 URL?

在没有元数据的情况下连接到 Web 服务

如何在不使用 EF 的情况下连接到 ASP.NET Core Web API 中的数据库?

在没有 mssql 支持的情况下连接到 mssql

如何在没有 SSL 的情况下连接到 MySQL 数据库

Swift:检查iOS是不是在没有互联网的情况下连接到wifi