标签:lts 翻译 -- 有道 JS url sign self md5
一、目标
有道翻译网站:https://fanyi.youdao.com/
通过有道翻译的接口,代码实现翻译功能
二、分析
- 当我们输入翻译内容时,会局部刷新出翻译结果 打开抓包工具,重新输入一个翻译内容,在’XHR‘下会捕获到一个ajax请求数据包
- url:’https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule‘
- POST请求方式
- 表单数据中i(需要翻译的内容)、salt、sign、lts参数是动态变化的,bv参数虽然不变,但是经过了加密
- 我们可以在这几个地方打断点,重新输入翻译内容进行调试
- 通过分析js发现:
- i:需要翻译的内容
- lts:时间戳 *1000,然后取整
- salt:lts后面再添上一位0-9之间的随机数
- sign:将('fanyideskweb' + i + salt + 'Tbh5E8=q6U3EXe+&L[4c@')进行md5加密
- bv:浏览器版本号,将User-Agent中第一个/以及前面的内容去掉后,进行md5加密
- 接下来我们就可以通过python代码去实现JS逆向,但是需要注意的是,有道网站需要验证headers中的cookie、User-Agent以及Referer参数,否则无法获取到数据,因此我们可以考虑使用requests模块中的session去发送请求,它会帮我们处理cookie
三、代码实现
# coding:utf-8 import requests import time import random from hashlib import md5 from fake_useragent import UserAgent class YouDao: def __init__(self): self.ua = UserAgent(use_cache_server=False).random # 生成一个随机User-Agent self.get_url = 'https://fanyi.youdao.com/' self.post_url = 'https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule' self.headers = { 'Referer': self.get_url, 'User-Agent': self.ua } self.sess = requests.session() def start(self): # 通过session发送请求,会获得cookie,再次发送请求时会携带上 self.sess.get(url=self.get_url, headers={'User-Agent': self.ua}) while True: i = input('请输入需要翻译的内容(q退出):') if i == 'q': self.sess.close() break # js逆向 lts = str(int(time.time() * 1000)) # 时间戳*1000的整数部分字符串 bv = md5(self.headers['User-Agent'].partition('/')[-1].encode()).hexdigest() # md5加密的浏览器版本 salt = lts + str(random.randint(0, 9)) # lts后面添上一个0-9的随机整数 sign = md5(('fanyideskweb' + i + salt + 'Tbh5E8=q6U3EXe+&L[4c@').encode()).hexdigest() # md5加密的签名 form_data = { 'i': i, # 需要翻译的内容 'from': 'AUTO', 'to': 'AUTO', 'smartresult': 'dict', 'client': 'fanyideskweb', 'salt': salt, 'sign': sign, 'lts': lts, 'bv': bv, 'doctype': 'json', 'version': '2.1', 'keyfrom': 'fanyi.web', 'action': 'FY_BY_REALTlME' } result = self.sess.post(url=self.post_url, headers=self.headers, data=form_data).json()['translateResult'][0][0]['tgt'] print('翻译结果:%s'%result) if __name__ == '__main__': YouDao().start()
四、运行结果展示
请输入需要翻译的内容(q退出):中国 翻译结果:China 请输入需要翻译的内容(q退出):hello 翻译结果:你好 请输入需要翻译的内容(q退出):q
Process finished with exit code 0
标签:lts,翻译,--,有道,JS,url,sign,self,md5 来源: https://www.cnblogs.com/eliwang/p/14854425.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。