能夠經過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)
複製代碼