socket.io客户端未在请求中设置sid

时间:2020-11-08 12:31:04

标签: node.js socket.io

我正在尝试构建一个nodejs脚本来与socket.io服务器通信。

const io = require('socket.io-client');
const socket = io('http://192.168.144.249');

socket.on('connect', () => {
  console.log('connected');
})

使用wireshark跟踪流量,我可以看到以下内容:

receiving sid and cookie

因此,浏览器在响应正文和cookie中都向我发送了一个sid。 不幸的是,我的以下请求不包含此sid,并且我收到了400 Bad Request错误:

enter image description here

当我尝试从浏览器窗口构建相同的客户端时,我看到确实设置了该cookie,既作为cookie又作为查询参数:

enter image description here

我不想使用浏览器,我想使用独立的节点脚本。据我了解,响应的解析和会话ID的包含应由socket.io-client自动完成。我错了吗?如果是这样,我该如何拦截此事件,以便可以通过以下请求发送sid?

我应该首先对服务器执行一个简单的http请求,从那里获取sid,然后在使用自定义cookie或自定义查询参数创建它时将其添加到socket.io客户端吗?

我还可以看到,节点独立脚本正在使用engine.io版本4(GET请求中的EIO=4),而浏览器正在使用engine.io版本3,但是收到的Respose似乎是完全一样,所以我真的不认为这是阻止脚本自动完成与服务器握手的原因。

1 个答案:

答案 0 :(得分:0)

嗯,我错了。确实是协议不匹配的问题。

我能够使用X.tr(); [&X].tr(); vec![&X].tr(); (&[&X]).tr(); (&vec![&X]).tr(); 使脚本正常工作。安装:

socket.io-client@1.0.2