在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/網絡安全  HTML/ websocket返回數據是gzip格式,請問怎么解壓縮?

websocket返回數據是gzip格式,請問怎么解壓縮?

websocket返回數據是gzip格式,請問怎么解壓縮?

function ws(url){

var ws = new WebSocket(url);
ws.onopen = function(evt){
    console.log(evt);
};
ws.onmessage = function(evt){
    console.log(evt);                
};
ws.onerror = function(evt){
    console.log(evt);
}

}
ws('wss://api.huobi.br.com/market/tickers');

打印出來的evt是這樣的

clipboard.png

data是一個Blob對象
在網上查了資料說使用pakojs中的pako.inflate()方法可以解壓縮,但我使用后報錯:
Uncaught unknown compression method
//未知的壓縮方法

所以不知道怎么解壓了?

回答
編輯回答
薄荷糖

感謝樓上提供思路,我請求返回的數據是一個Blob對象,存儲的是二進制數據。
所以需要先從Blob對象中提取數據,然后再用pako.inflate()方法進行解壓

具體什么是Blob對象,請看這里鏈接描述

具體代碼如下:
ws.onmessage = function(evt){

if(evt.data instanceof Blob){
    let result = '';
    let reader = new FileReader();
    //FileReader:從Blob對象中讀取數據
    reader.onload = function() {
        result = JSON.parse(pako.inflate(reader.result,{to:'string'}));
       //pako.inflate()對數據進行解壓,得到正常的json對象
        if(result.ping){
            ws.send(JSON.stringify({pong:result.ping}));
            //響應服務器,避免斷開連接
         }
     }
     reader.readAsBinaryString(evt.data);
     //將返回的數據解析為字符串格式
 }

};

2018年2月28日 07:48
編輯回答
來守候

這個不是 gzip哦,所以不存在解壓。

可以 這么用


var reader = new FileReader();
reader.onload = function() {
    alert(reader.result);
}
reader.readAsText(evt);

2018年1月4日 05:48