在微信開發者工具上uni.connectSocket的連接是正常的,一旦到真機預覽就連接報錯了,不管是真機預覽還是體驗版真機都會報錯。
真機報錯如下:open fail:_code:20,_msg:Invalid HTTP
最後在查找各種資料發現websocket的url不能包含特殊字符,必須轉碼才可以
比如我下面在url上拼接了一個token,這個token可能包含特殊字符(如 =、&、+ 等),這些字符在 URL 中有特殊含義(如 & 用於分隔參數)。如果直接拼接未編碼的 token,可能會導致 URL 解析錯誤
通過encodeURI將你的url參數轉碼即可,對URL中不符合規範的字符進行編碼確保整個URL格式正確
如encodeURI會將空格轉為%20,將&轉為%26等
this.SocketTask = uni.connectSocket({
url: this.url + '?access_token=' + encodeURI(this.token),
method: 'GET',
success: (e) => {
console.log('連接成功', e);
},
fail: (e) => {
console.log('連接失敗', e);
}
})
參考文章:https://blog.csdn.net/dujyong/article/details/105507581