破解有道词典翻译-版本二
首先附上源码\'\'\'
破解有道词典版本二,加salt,sign
首先,把fanyi.minni.js中的Response代码复制到txt文件中,通过查找功能找到salt,sign
salt:i="" + (new Date).getTime()+parseInt(10 * Math.random(), 10)
sign:n.md5("fanyideskweb" + e + i + "p09@Bn{h02_BIEe]$P^nG")
md5总共需要四个参数:第一个跟第四个是固定值,第三个是salt,第二个是。。。
第二个参数就是输入要查找的单词
\'\'\'
from urllib import request,parse
def getSalt():
#salt:i="" + (new Date).getTime()+parseInt(10 * Math.random(), 10)
import time,random
salt=int(time.time()*1000)+random.randint(0,10)
# print(salt)
return salt
def getMD5(v):
import hashlib
md5=hashlib.md5()
md5.update(v.encode(\'utf-8\'))
sign=md5.hexdigest()
return sign
def getSign(key,salt):
sign="fanyideskweb" + key + str(salt) + "p09@Bn{h02_BIEe]$P^nG"
sign=getMD5(sign)
return sign
def youdao(key):
# 请求地址
url = \'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule\'
salt=getSalt()
# 请求体
data = {
"i": key,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"salt": str(salt), ### 盐:很长的随机串,防止用字典反推,注意要用同一把盐!
"sign": getSign(key,salt), ## 签名:js加密
# "ts":"1550487827114",
# "bv":"65db4e7e1a2a0ee160ea1e66436196cd",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTIME",
"typoResult": "false"
}
# 数据编码
data = parse.urlencode(data).encode()
headers = {
"Accept": "application/json,text/javascript,*/*;q = 0.01",
# "Accept-Encoding": "gzip,deflate", #### 啥意思。。查。。有它就会错误
#这个头信息是告诉服务器客户端所支持的压缩方式,如果没有这行的话,就是告诉服务器,
# 客户端不支持压缩,要求不压缩直接返回文本。
"Accept-Language": "zh-CN,zh;q = 0.8",
"Connection": "keep-alive",
"Content-Length": len(data),#长度随着翻译单词变化!
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"Cookie": "YOUDAO_EAD_UUID=c7c1d171-272e-443f-9d07-d9f8c779342e; _ntes_nnid=f691c54e993915b7e783b9985d6cc6aa,1490533835544; __guid=204659719.1198573978453254000.1502548625976.454; OUTFOX_SEARCH_USER_ID_NCOO=937151153.4321815; P_INFO=userlvkaokao@163.com|1523271382|0|other|00&99|bej&1523189875&hzhr#bej&null#10#0#0|157818&0|hzhr|userlvkaokao@163.com; OUTFOX_SEARCH_USER_ID=-2077552359@180.201.180.165; _ga=GA1.2.667209885.1524559124; JSESSIONID=aaaTQDWkaB_7QbzNHL4nw; monitor_count=1; fanyi-ad-id=44547; fanyi-ad-closed=1; ___rl__test__cookies=1526736521106",
"Host": "fanyi.youdao.com",
"Origin": "http://fanyi.youdao.com",
"Referer": "http://fanyi.youdao.com/",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36",
}
req = request.Request(url=url, data=data, headers=headers)
rsp = request.urlopen(req)
html = rsp.read().decode()
print(html)
if __name__ == \'__main__\':
youdao(\'word\')
在破解有道词典翻译的过程中,会遇到比较多的错误,例如:
1.http.client.RemoteDisconnected: Remote end closed connection without response
这个错误可能是因为没有注释掉ts,bv,或者头部信息复制后修改出错
2.404错误
可能因为headers请求头复制后修改错误
3.UnicodeDecodeError: \'utf-8\' codec can\'t decode byte 0x8b in position 1: invalid start byte
因为没有注释掉请求头中的Accept-Encoding导致的错误;这个头信息是告诉服务器客户端所支持的压缩方式,如果没有这行的话,就是告诉服务器,
客户端不支持压缩,要求不压缩直接返回文本。
4.一个用来进行js格式缩进美化的网址:http://tool.oschina.net/codeformat/js/