pako解壓
『壹』 怎麼樣python爬蟲進行此網站爬取
是加密的,解密方法在JS裡面可以弄出來。
首先要AES解密,可以【Python:import Crypto.Cipher.AES】包,解密mode是CFB,seed是"userId:"+uid+":seed"的SHA256值,解密的key是seed[0:24],iv是seed[len(seed)-16:]。
如果沒有登錄,uid就是用的"anyone",這時候的seed是"",也就是key為"61581AF471B166682A37EFE6",iv為"C8F203FCA312AAAB"。
解密後文件是壓縮過的,解壓即可得到一個JSON。這部分解壓我沒仔細看他的演算法,好像是gzip,直接用【Python:import gzip】解壓有點出錯,可能沒用對或者不是這個演算法,你在研究一下。第二種投機的方法就是,可以通過【Python:import execjs】直接調用他的pako.js文件的JS的inflate()函數來解壓這塊。JS代碼混淆後看起來是非常難懂的,使用這種做法可以不用太看懂加密的演算法,效率當然寫Python實現這個解密演算法低1點咯。
最後的JSON再用【Python:import demjson】解析,text的value就是文檔。
『貳』 2020-11-18 gzip 前後端數據傳輸壓縮『pako』
let zlib = require("pako"); //引入
//壓縮方法 用來將大數據壓縮後在傳給後端
Vue.prototype.zip = function (str) {
//encodeURIComponent 將字元串作為URI組件進行編碼
//zlib.gzip() 將編碼後的數據進行壓縮,string類型
let binaryString = zlib.gzip(encodeURIComponent(str), {
to: "string"
});
//btoa()將壓縮後的數據變成base64格式
return btoa(binaryString);
},
//解壓縮方法,前端接受後端大數據後,先解壓縮在進行後面的邏輯
Vue.prototype.unzip = function (b64Data) {
//atob()將base64格式數據轉化成壓縮數據
let strData = atob(b64Data);
//split()方法用於把一個字元串分割成字元串數組
//通過map函數進行遍歷,並對每一個進行 Unicode 編碼
let charData = strData.split("").map(function (x) {
//charCodeAt() 方法可返回指定位置的字元的 Unicode 編碼
return x.charCodeAt(0);
});
//Uint8Array 8 位無符號整數值的類型化數組
let binData = new Uint8Array(charData);
// console.log(binData);
//解壓縮 充氣
let data = zlib.inflate(binData);
//fromCharCode 將 Unicode 編碼轉為一個字元:
// console.log(data);
//分片解壓縮,防止數據量過大,瀏覽器棧溢出報錯
let chunk = 8 * 1024;
let res = "";
let dataLength = data.length / chunk;
let i;
for (i = 0; i < dataLength; i++) {
res += String.fromCharCode.apply(
null,
data.slice(i * chunk, (i + 1) * chunk)
);
}
res += String.fromCharCode.apply(null, data.slice(i * chunk));
//decodeURIComponent() 對 encodeURIComponent() 函數編碼的 URI 進行解碼
strData = res;
return decodeURIComponent(strData);
},
2021-02-20:
問題更新:最新客戶在使用的過程中,發現頁面展示會出現莫名其妙的「+」。
對此,我們進行了一番查詢,發現問題原因如下:後端在將數據壓縮的過程中,正常情況下會將數據中的「+」號編碼成%2B,同時會將「 空格 」編碼成「%20」,那麼前端接收以後,就可以進行解碼。
但是,我們發現數據中的「+」會被正常編碼,但是空格卻不會,而是編碼成了「+」.那麼,前端接收以後在解碼的過程中,就無法對「+」進行解碼,就會造成顯示和真實數據不一致。
解決方案:後端在壓縮完成後,再將所有的「+」編碼替換成「%20」,這樣,在前端接收數據後,就能將數據正常解碼並顯示。
『叄』 vue 基於pako.js實現gzip的壓縮和解壓功能
後台返回的數據是gzip 加密過的,需要解壓數據,如下圖所大型行示:
我們需要上圖標出來的租念加密滾嘩數據進行解密出來
1 安裝 :
2 使用