之前的答案是针对 socket.io JS 客户端的,这里是针对 socket.io python 客户端的相同 hack。
从 /home/user/.local/lib/python3.6/site-packages/engineio 修改 client.py 文件
行号515
改变这个,
return ('{scheme}://{netloc}/{path}/?{query}'
'{sep}transport={transport}&EIO=3').format(...
到这里,
return ('{scheme}://{netloc}/{path}?{query}'
'{sep}transport={transport}&EIO=3').format(...
现在,我们可以使用条件参数,而不是直接修改实际流程。
if self.noslash == 'true':
return ('{scheme}://{netloc}/{path}?{query}'
'{sep}transport={transport}&EIO=3').format(...
否则返回原始语句。
noslash参数可以从python的engineio和socketio库的connect()函数中获取。
def connect(self, url, headers={}, transports=None,
engineio_path='engine.io', noslash=None):
self.noslash = noslash
这是 python-socketio 的示例连接字符串
sio.connect('http://localhost:9099', headers={'Authorization':'Bearer 90e8sf10-3s1w-495f-b20d-5a009f63193v'}, transports=['websocket'], socketio_path='/livefeed/v1', noslash='true')