我正在尝试构建一个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,但是收到的Respose似乎是完全一样,所以我真的不认为这是阻止脚本自动完成与服务器握手的原因。
答案 0 :(得分:0)
嗯,我错了。确实是协议不匹配的问题。
我能够使用X.tr();
[&X].tr();
vec![&X].tr();
(&[&X]).tr();
(&vec![&X]).tr();
使脚本正常工作。安装:
socket.io-client@1.0.2