【发布时间】:2020-11-08 20:49:14
【问题描述】:
我正在尝试构建一个 nodejs 脚本来与 socket.io 服务器通信。
const io = require('socket.io-client');
const socket = io('http://192.168.144.249');
socket.on('connect', () => {
console.log('connected');
})
使用wireshark跟踪流量我可以看到以下内容:
所以浏览器会在响应正文和 cookie 中向我发送一个 sid。
不幸的是,我的以下请求不包含此 sid,并且我收到了 400 Bad Request 错误:
当我尝试从浏览器窗口构建相同的客户端时,我可以看到这个 cookie 确实设置为 cookie 和查询参数:
我不想使用浏览器,我想使用独立的节点脚本。据我了解,响应的解析和会话 ID 的包含应该由 socket.io-client 自动完成。我错了吗?如果是这样,我怎样才能拦截这个事件,以便我可以发送带有以下请求的 sid?
我是否应该首先向服务器发出一个简单的 http 请求,从那里获取 sid,然后在使用自定义 cookie 或自定义查询参数创建它时将其添加到 socket.io 客户端?
我还可以看到节点独立脚本正在使用 engine.io 版本 4(GET 请求中的EIO=4),而浏览器正在使用 engine.io 版本 3,但收到的响应似乎完全正确同样,所以我真的不认为这是阻止我的脚本自动完成与服务器握手的原因。
【问题讨论】: