能够经过chrome的开发者工具network查看请求发生的详细数据,获取到头部数据,以及发送的数据javascript
get和post通常二选一,经过查看数据的详细信息,获得请求为post方式java
多请求几回,弄清楚每一个字段的含义,而后构造各个字段。主要是4个字段在变化.在youdao.js中能够找到各个字段的含义 salt : i = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10)) sign: # o = n.md5("fanyideskweb" + "word" + salt + "ebSeFb%=XZ%T[KZ)c(sy!");python
ts: 为完整的时间戳字符串 bv: 客户端版本的md5,不换客户端这个值不会变化web
经过python3的requests库,得到发送以后的结果,并将其输出。chrome
若是请求次数多了以后有道官方是否回封ip,若是封ip的话,须要用ip代理以及多请求头来实现一个完整的代码来实现一个工具。json
# -*- coding: utf-8 -*-
import requests
import random
import time
import hashlib
word = "今天晚上下雨"
appversion = "5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36"
data = {
"i": word,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTlME"
}
salt = str(int(time.time() * 1000) + random.randint(0, 9))
sign = hashlib.md5()
sign.update("".join([
"fanyideskweb", word, salt, "@6f#X3=cCuncYssPsuRUE"
]).encode("utf-8"))
sign = sign.hexdigest()
bv = hashlib.md5()
bv.update("".join([appversion]).encode("utf-8"))
bv=bv.hexdigest()
data["salt"] = salt
data["sign"] = sign
data["ts"] = str(int(time.time() * 1000))
data["bv"] = bv
headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
"Connection": "keep-alive",
"Content-Length": "251",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Cookie": "OUTFOX_SEARCH_USER_ID=-399226185@10.108.160.19; JSESSIONID=aaaI_UrHnAfSw6oMdoRTw; OUTFOX_SEARCH_USER_ID_NCOO=670443238.5496794; ___rl__test__cookies=1560871983956",
"Host": "fanyi.youdao.com",
"Origin": "http://fanyi.youdao.com",
"Referer": "http://fanyi.youdao.com/",
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
}
url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
response = requests.post(url, data=data, headers=headers)
print(response.text)
复制代码