可以看到了变的参数只有一个_toke,接下来解决toke,直接搜索
通过window.Rohr_Opt.reload函数加密,reqUrlAndParams是在上面生成的
,进去函数里面看
iP.reload = function(jv) {//jv最初生成的链接和接口
var jw;
var jx = {};
if (typeof jv === _$_543c[91]) {
jx = iO.parse(jv.split(_$_543c[146])[1])
} else {
if (typeof jv === _$_543c[2]) {
jx = jv
}
}
//jv==>没有toke的params
;iP.sign = iJ(jx);
//生成时间戳
iP.cts = new Date().getTime();
jw = iI(iP);
if (Rohr_Opt.LogVal && typeof (window) !== _$_543c[0]) {
window[Rohr_Opt.LogVal] = encodeURIComponent(jw)
}
;return jw
(1):先通过函数ij把jx(没有toke的params)加密
(2):在通过il把ip加密生成toke
ip={
"rId": 100900,
"ver": "1.0.6",
"ts": 1674968465018,
"cts": 1674968468363,
"brVD": [
150,
714
],
"brR": [
[
1536,
864
],
[
1536,
816
],
24,
24
],
"bI": [
"https://jx.meituan.com/meishi/pn4/",
"https://jx.meituan.com/meishi/pn3/"
],
"mT": [],
"kT": [],
"aT": [],
"tT": [],
"aM": "",
"sign": "eJwljUtOAzEQRO+SRS/9mek4GMkLlBVSxI4DWJlOYjL+yG5HcAAW3ICDcKXcAyNW9Up6qtr4Sv55cQqOnukfAn+8+Eju/v11//yBJaREdZ974ifmOhzIhUPsbZ8XclpBruEc0mtd3YW5tEcp395FpMDdJ3HMUQ5ulyBLQgnFn8nhiMpj1unJQFk9n3KNTkMN7XqgG62DW67soDf6+5xwi/oBt8ZC72F0ImsMeoW7E5p5tnpahDY7tEbNVgktlFCbX2w0Snw="
}
ij函数实际就干了3件事:ck==>拿了没有toke的params的所以vaule(见)
jd====>
将jd在il函数里面加密,并返回
deflate===>压缩,在il函数实际就干了一件事:把传进去的参数进行压缩,
这个加密实际上就是干了2次压缩
可在python里面实现
压缩
import zlib
import base64
params = {
'cityName': '北京',
'cateId': '0',
'areaId': '0',
'sort': '',
'dinnerCountAttrId': '',
'page': '2',
'userId': '2454184569',
'uuid': '2ee9664a047f4633912d.1674960390.1.0.0',
'platform': '1',
'partner': '126',
'originUrl': 'https://bj.meituan.com/meishi/pn2/',
'riskLevel': '1',
'optimusCode': '10',
}
#compress压缩
#AttributeError: 'dict' object has no attribute 'encode'所以必须强转为str
zill=zlib.compress(base64.b64encode(str(params).encode()))
print(zill)
解压
import zlib
import base64
#decompress解压
_token='eJxVjluPojAYhv9LbyG2MLVQ7zyB1qCgyAibuUAOcrKgFMlks/99O4l7scmXvIfvuXh/g+c2BTMNIYqQCl7ZE8yANkETAlQgevkhBqYEUWpqWFNB8n+nY6qC6zNYgdkvbYpUQ8NfP8VRZll8ENUksnlbjXypOpb3w2wlAgohun4G4bWa3LNSDDGfJO0dSt8XJey4DuUMIPG7L3Gp9Vvjt4p/2ZG7JduXNy5dxsamSoTwqvX5uBFFEuWK++mWJ2u6fi6ZZVi7+WgM8+98v6HV+eReF+6a1DcaekrC/IAz+xA1sdJyJeXhkjL4vfH2WVop1SAIzLmuhB7qQmHUPCvtx4itZOf4meCNzcZLbbe4eKW5xcNilylXE5tjuRhapb/oh3wzNxYBOeFmZa4jFJ8/uXN41E7jXPxtmrds73uugOOtf92asp+S+Qd0uyCL4b3WzGhp6BY62oNDa/Zaic6pp8EjEqwXq6DsW8ZYV4Sut1w46OGBP38B+QWQjw=='
zlll=zlib.decompress(base64.b64decode(_token.encode())).decode()
print(zlll)
import zlib
import base64
import time
params = {
'cityName': '嘉兴',
'cateId': '0',
'areaId': '0',
'sort': '',
'dinnerCountAttrId': '',
'page': '3',
'userId': '2454184569',
'uuid': '2ee9664a047f4633912d.1674960390.1.0.0',
'platform': '1',
'partner': '126',
'originUrl': 'https://jx.meituan.com/meishi/pn3/',
'riskLevel': '1',
'optimusCode': '10',
}
def compress_yashu(data):
encode1=str(data).encode()
compress=zlib.compress(encode1)
b_encode=base64.b64encode(compress)
e_sing=str(b_encode,encoding="utf-8")
return e_sing
sign=compress_yashu(params)
ip={
"rId": 100900,
"ver": "1.0.6",
"ts": int(time.time()*1000),
"cts": int(time.time()*1000)+1000,
"brVD": [
150,
714
],
"brR": [
[
1536,
864
],
[
1536,
816
],
24,
24
],
"bI": [
"https://jx.meituan.com/meishi/pn3/",
"https://jx.meituan.com/meishi/pn2/"
],
"mT": [],
"kT": [],
"aT": [],
"tT": [],
"aM": "",
"sign":sign
}
toke=compress_yashu(ip)
print(toke)