破解有道词典在线翻译接口--python

没什么好说的,直接上代码。

import requests
# import json
import time
import random
import hashlib

translate = input('>>>>>>>')
url_1 = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
ts = str(int(time.time()*1000))
salt = ts + str(int(random.random()*10))
print(ts,salt)
md5 = hashlib.md5()
md5.update(("fanyideskweb" + translate + salt + "p09@Bn{h02_BIEe]$P^nG").encode('utf8'))
sign = md5.hexdigest()
print(sign)
data = {'i': translate,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'ts': ts,
        'salt': salt,
        'sign': sign,
        'bv': 'b8bcedb6e9d30eb0beaae6f2c4cb90f1',
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTIME',
        'typoResult': 'false',
        }
cookies = {'OUTFOX_SEARCH_USER_ID': ###不告诉你自己看自己的##, 'OUTFOX_SEARCH_USER_ID_NCOO': ##不告诉你自己看自己的##,
           'JSESSIONID': ##不告诉你自己看自己的###, '___rl__test__cookies': str(int(ts)-7)}
header = {'Accept': 'application/json, text/javascript, */*; q=0.01',
          'Accept-Encoding': 'gzip, deflate',
          'Accept-Language': 'zh-CN,zh;q=0.9',
          'Cache-Control': 'no-cache', 'Connection': 'keep-alive',
          'Content-Length': '252',
          'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
          'DNT': '1',
          'Host': 'fanyi.youdao.com',
          'Origin': 'http://fanyi.youdao.com',
          'Pragma': 'no-cache',
          'Referer': 'http://fanyi.youdao.com/',
          'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) '
                        'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36',
          'X-Requested-With': 'XMLHttpRequest',
          }

res_1 = requests.post(url_1, data=data, headers=header, cookies=cookies)
print(res_1.text)

  稍微解释一下。

  ts是根据系统时间生成的毫秒。(随便什么时间。我试过1990年都可以。)

  salt是str(ts)后与1-9随机一个数字做拼接。

  sign是MD5("fanyideskweb" + 待翻译内容 + salt + "p09@Bn{h02_BIEe]$P^nG")

  bv是MD5(浏览器的版本信息,如5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36)所以请求头中一定要带 上User-Agent)

  !cookies中的___rl__test__cookies应该是首次打开网页时的系统时间,后面每次请求都会变。总之就是记录发送翻译请求前的时间。随便拿ts减个数字就行了。(应该吧)

其他的参数。固定就行(看下自己浏览器发的数据填上去就行)。没具体测试每一个参数。懒得弄的,就把一直在变化的测试了下,其他都是复制粘贴的。

 

总之,有道的反爬还是很简单的。答案在js代码中都能找到。就这样吧。

上一篇:爬取有道翻译


下一篇:067.Python框架Django之DRF视图类