import time r = time.time() r = int(r*1000) print(r) >>>1639141944732
可以看到ts也就是上面的r和Payload里面的“lts”已经搞定。
再搞定salt
先来生成parseInt(10 * Math.random(), 10)的随机数:
import random s = random.randint(0,10) print(s)
再来实现i = r + parseInt(10 * Math.random(), 10):
import time import random r = time.time() r = int(r*1000) s = random.randint(0,10) i = r+s print(i)
至此,我们已经拿到了三个参数,代码也可以改写一下了:
import requests import time import random url = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule" headers={ "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36", "Cookie": "OUTFOX_SEARCH_USER_ID=2030291441@10.169.0.102; JSESSIONID=aaaL9cZGnEYP5anryhK2x; OUTFOX_SEARCH_USER_ID_NCOO=624916323.622491; DICT_UGC=be3af0da19b5c5e6aa4e17bd8d90b28a|; JSESSIONID=abcbn5lLEK4FC4F7BhK2x; ___rl__test__cookies=1639138497978", "Referer": "https://fanyi.youdao.com", "Content-Length": "252" } #获取时间戳 r = time.time() r = int(r*1000) #获取salt s = random.randint(0,10) i = r+s Payload = { "i":"太阳", "smartresult": "dict", "client": "fanyideskweb", "salt": i, "sign": "b1e30cb6bb14501ea6827a83a554dcae", "lts": r, "bv": "e70edeacd2efbca394a58b9e43a6ed2a", "doctype": "json", "version": "2.1", "keyfrom": "fanyi.web", "action": "FY_BY_REALTlME" }
res = requests.post(url, headers=headers, data=Payload) print(res.status_code) print(res.text)
最后搞定sign
通过观察可以发现:sign: n.md5("fanyideskweb" + e + i + "Y2FYu%TNSbMCxc3t2u^XT"),能得到的信息有:1.这个是md5加密,2."fanyideskweb"是固定的,3.i前面已经生成了,4.e不知道是什么,5."Y2FYu%TNSbMCxc3t2u^XT"这一部分是固定的。
通过断点调试后发现,e就是我们输入的文字。
最后一步,百度md5怎么加密,这里我感觉是最难的地方,说实话这一块我也不懂,百度的结果如下:
from hashlib import md5 string = "**********" m = md5() m.update(string.encode()) sign = m.hexdigest()