关于这个问题,我在过去几天搜索了堆栈溢出和谷歌。
我正在尝试连接到第三方API,因此无法访问或查看websocket服务器。
我能够连接到OAuth端点并返回有效的Access令牌但是我无法通过socket.io-clients io.connect 方法传递此访问令牌,而访问令牌不是urlencoded
我用来访问端点的代码(已过期但有效的访问令牌)
serviceEndpoint = "/uapi/ws/" + sha1(appId + accessToken) + "/" + instanceId + "/";
socket = io.connect(host, {
transports: ['websocket'],
path: serviceEndpoint,
query: "access_token=1|5-zURhzg6X-vEWUwqBM~b9D0vqHJ-bBR|211|1455710158|7-ykMSvs07-w13mfhpf.CBNJEmmH.GY5"
});
当从服务器(401)收回错误时,正在请求的网址具有 access_token 的以下字符串:
access_token=1%7C5-zURhzg6X-vEWUwqBM~b9D0vqHJ-bBR%7C211%7C1455710158%7C7-ykMSvs07-w13mfhpf.CBNJEmmH.GY5
正如您所看到的,所有管道(|)字符都已被编码,导致服务器丢弃该令牌。
答案 0 :(得分:0)
因此,在经过更多研究并查看其他方法以及与API提供商的讨论后,我发现的一个解决方法是在连接上设置标题。
This Stack Overflow Answer绝对有帮助。请注意,socket.io-client的版本需要为> = 1.4才能使其正常工作