我有一个可以建立WebSocket连接的服务器。当设备建立WebSocket连接时(当应用程序启动/启动屏幕时),服务器会在URL中查找query parameter
,其中包含用户的身份验证令牌,如果令牌正确,则连接被批准,否则连接被拒绝。
这是代码在本机客户端反应的方式:
const socket = new WebSocket(`ws://${website}/?token=${value}`);
socket.onmessage = (messageEvent) => {
console.log('>>> socket on message:', messageEvent.data);
};
socket.onopen = function () {
socket.send("hello world connection");
};
socket.onclose = () => {
console.log('Socket disconnected');
};
这在我的iOS模拟器中工作正常,iOS模拟器与我的服务器有一个WebSocket连接。但是,我有一个Android手机(通过LAN测试),当我打开应用程序时,我收到一个错误说:
无法将ws://192.xxx.xx.xx/token=aut sfiseft2sefsefs .....设置为默认原始标题
但是,如果我从URL中删除查询参数
const socket = new WebSocket(`ws://${website}`);
这样可以正常工作,但由于我无法在查询参数中传递令牌,因此我从服务器收到错误。
如何将查询参数传递给android中的WebSocket连接?我做错了什么?
答案 0 :(得分:1)
我有同样的问题。在将url传递给WebSocket之前使用encodeURI()解决问题。
const uri = encodeURI(`ws://${website}/?token=${value}`);
const socket = new WebSocket(uri);
这适合我。