1.抓包分析
1.1打开 https://fanyi.youdao.com/ 打开F12抓包 接口为post请求 筛选一下
经过对比可以看到字段 salt sign lts 变化 ,经过分析可以得到salt lts为时间戳 区别只是长度之间的差别
2.逆向分析
2.1 ctrl+shift+f全局搜索sign 可以找到fanyi.min.js文件
2.2 进入js文件 输入sign 经过筛选可以找到疑似md5加密 打个断点在网页重新输入需要翻译的字段
2.3 可以看到js是使用md5加密 这里采用拼接即可
2.4 拿到图1.1的post请求data,用字符串拼接一下代码:
salt: 16589335746912
sign: 5614d4985a3a4e0f7fc78bbedc3522f8
lts: 1658933574691
keyword = 'cat'
time = '16589335746912'
str = 'fanyideskweb'+ keyword + str(time) + 'Ygy_4c=r#e#4EX^NUGUc5'
md5.update(str.encode("utf8"))
sign = md5.hexdigest()
print(sign)
完整代码如下:
import hashlib,requests,time
md5 = hashlib.md5()
def down(keyword,sign,lts,salt):
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/103.0.5060.134 Safari/537.36 Edg/103.0.1264.71',
'referer':'https://fanyi.youdao.com/',
'cookie':'OUTFOX_SEARCH_USER_ID_NCOO=353057625.3046742; OUTFOX_SEARCH_USER_ID="242904760@10.105.137.203"; STUDY_SESS="42X+/0fQWO+PwZUs00HRb1Vc7OQtcOUmYi80326RJ9ThslfAR4KE/GhXLZCaYaVctoFBOCkE65ii+mJSpr4/sZK2WMhDg5A/z7iTmHO4xts2IU//wxoQxryqwc+QZyW2CM2DPabcGHI6x/L+re8MzguyV48liOelpnOvyb70J28Lhur2Nm2wEb9HcEikV+3FTI8+lZKyHhiycNQo+g+/oA=="; STUDY_INFO="oP4xHuAVkAf0MVwZBnwP6Jbwhy1c|6|1436746713|1658768068557"; DICT_SESS=v2|tZ4iqRJ_NWQzO4UmOLlM0lm0MkM0MOY0lEkfTynHqu0zYhMlm0Mg40JzOfTyh4g40gZhfTZ0Hlf0gukMpBkLey0lfOLgLOfYm0; DICT_LOGIN=1||1658768068628; fanyi-ad-id=308216; fanyi-ad-closed=0; ___rl__test__cookies=1658937677747',
}
data = {
'i': keyword,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'lts': lts,
'bv': '8b6c8845a74df59c1f2be6165a6104b5',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME',
}
res = requests.post(url,headers=headers,data=data)
return res
if __name__ == '__main__':
# salt: 16589335746912
# sign: 5614d4985a3a4e0f7fc78bbedc3522f8
# lts: 1658933574691
keyword = 'dog'
lts = str(int(time.time() * 1000))
salt = lts + str(1)
str = 'fanyideskweb' + keyword + str(salt) + 'Ygy_4c=r#e#4EX^NUGUc5'
md5.update(str.encode("utf8"))
sign = md5.hexdigest()
# print(sign)
res = down(keyword,sign,lts,salt).text
print(res)