最近为了熟悉一下 js 用有道翻译练了一下手,写一篇博客记录一下,也希望能对大家有所启迪,不过这些网站更新太快,可能大家尝试的时候会有所不同。

首先来看一下网页 post 过去的数据

大家不难发现,我们翻译的内容是放在 post 的 data 中的,这些参数,除了 salt 和 sign 要么就是不会变化,要么就是一眼能看出来意义的;那么这个 salt 和 sign 是什么呢?salt 根据 ta 数据的特征,我们应该会想到,这应该是一个时间戳,而 sign 又是什么呢?我们一起来看一下

找到这个 js 文件,最上面这个 send 文件

将里面的 js 代码拷贝出来,格式化一下,搜索 sign

我们发现,salt 确实是一个时间戳,但 sign 呢?,这里对 sign 的计算稍微多啰嗦几句,如图:

大家发现 sign 的值,也就是 o 一共是对四个参数进行求 md5 码,两个是定值,一个是前面求到的时间戳,还有一个是什么呢?这个地方我也找了挺久的(还是不懂 js 的痛啊,哭。。。)剩下的参数,就是图片中所谓的 tvar t = e.i

然后在 data 中,大家还能发现这么一句:

i:e.i

这个 i 我们对应到 ta 发送的 data 中,不就是我们要翻译的字符串吗?哈哈哈,被我发现了吧!

发现这个就好办了,我们找出其中参数之间的关系,用Python实现 ta

但当我们构造好 data 兴高采烈地将数据 post 过去的时候,会发现出现报错了

为什么呢?难道是我们的 data 构造的有问题吗?不清楚,先尝试一下,咱们吧浏览器中的 data 拷贝进来运行一下,发现还是出错了;那么说明错误不是出在 data 上面了,那究竟是那里出了问题呢?难道 ta 还有其他的校验方式;别着急继续分析,我们再观察一下,post 请求,发现这个请求是带了 cookie的,于是我们猜测,是不是 cookie 的原因呢? 还是不清楚,我们尝试一下,将 data 对应的 cookie 加上,再运行一下。发现这次通过了,我们的猜测没错,确实是 cookie 的原因,那么这个 cookie 又是怎么来的呢?

Cookie

多尝试几次,大家会发现,不同的请求内容,前面两个是不会发生改变的,而第三个,结合我们之前的经验,是不是很像一个时间戳;既然有猜测,咱们就又来尝试一下,自己构造一个 Cookie post 过去,万事大吉,哈哈哈哈。

最后附上我的代码#/usr/bin/python

# encoding:utf-8

# __Author__ = Slwhy

import requests

import time

import random

import hashlib

#i = "" + ((new Date).getTime() + parseInt(10 * Math.random(), 10))

i = str(int(time.time()*1000)+random.randint(1,10))

#o = n.md5("fanyideskweb" + t + i + "aNPG!!u6sesA hBAW1@(-");

t = raw_input("please input the word you want to translate:")

u = 'fanyideskweb'

l = 'aNPG!!u6sesA hBAW1@(-'

src = u + t + i + l # u 与 l 是固定字符串,t是你要翻译的字符串,i是之前的时间戳

m2 = hashlib.md5()

m2.update(src)

str_sent = m2.hexdigest()

'''

i:number

from:AUTO

to:AUTO

smartresult:dict

client:fanyideskweb

salt:1515462554510

sign:32ea4a33c063d174a069959a5df1a115

doctype:json

version:2.1

keyfrom:fanyi.web

action:FY_BY_REALTIME

typoResult:false

'''

head = {

'Accept':'application/json, text/javascript, */*; q=0.01',

'Accept-Encoding':'gzip, deflate',

'Accept-Language':'zh-CN,zh;q=0.9',

'Content-Length':'200',

'Connection':'keep-alive',

'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',

'Host':'fanyi.youdao.com',

'Origin':'http://fanyi.youdao.com',

'Referer':'http://fanyi.youdao.com/',

'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36',

'X-Requested-With':'XMLHttpRequest',

# 'Cookie': 'YOUDAO_MOBILE_ACCESS_TYPE=1; OUTFOX_SEARCH_USER_ID=833904829@10.169.0.84; OUTFOX_SEARCH_USER_ID_NCOO=1846816080.1245883; fanyi-ad-id=39535; fanyi-ad-closed=1; JSESSIONID=aaaYuYbMKHEJQ7Hanizdw; ___rl__test__cookies=1515471316884'

}

head['Cookie'] = 'OUTFOX_SEARCH_USER_ID=833904829@10.169.0.84; OUTFOX_SEARCH_USER_ID_NCOO=1846816080.1245883; ___rl__test__cookies='+str(time.time()*1000)

# '___rl__test__cookies=1515471316884'

data = {

'i': t,

'from':'AUTO',

'to':'AUTO',

'smartresult':'dict',

'client':'fanyideskweb',

'salt':i,

'sign':str_sent,

'doctype':'json',

'version':'2.1',

'keyfrom':'fanyi.web',

'action':'FY_BY_REALTIME',

'typoResult':'false'

}

s = requests.session()

# print data

url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'

p = s.post(url,data= data,headers = head)

print p.text

到此这篇关于Python 调用有道翻译接口实现翻译的文章就介绍到这了,更多相关Python 有道翻译内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

python有道自动翻译_Python 调用有道翻译接口实现翻译相关推荐

  1. 使用Python调用有道翻译接口实现翻译任务

    使用Python调用有道翻译接口实现翻译任务 首先直接上代码,可以直接复制调用 import hashlib import random import timeimport requestsclass ...

  2. python api接口调用_python 调用有道api接口的方法

    初学者学习python,研究了几天之后,我写了一个python程序调用有道api接口.效果如下图所示:声明:代码仅仅是像我这样的初学者学习和交流.应用程序非常简单.PS:评审不需要时间,请不要滥用!! ...

  3. python有道自动翻译_python文档自动翻译

    关键方法 提取文档内容 读取TXT文档 txt文档的读取很简单,直接用python自带的open()方法就好,代码如下所示: # 读取TXT文档 def read_txt(path): '''实现TX ...

  4. python调用有道翻译_Python调用有道翻译

    import requests import json import time import hashlib import random if __name__ == '__main__': S = ...

  5. python爬取有道词典_python 爬虫+有道词典实现一个简单翻译程序

    #coding=utf-8 importurllibimporturllib2importjson'''功能说明: 根据输入要翻译的文字,进行有道自动翻译: 实现中文->英文.英语及其他语言-& ...

  6. python 方法的实例_python调用自定义函数的实例操作

    在python中,想要调用自定义函数必须先声明,然后才能调用.使用函数时,只要按照函数定义的形式,向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果. (1)声明函数 pyt ...

  7. python 百度ocr安装_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  8. python 微信公众号网页接口调用_Python调用微信公众平台接口操作示例

    本文实例讲述了Python调用微信公众平台接口操作.分享给大家供大家参考,具体如下: 这里使用的是Django,其他类似 # coding=utf-8 from django.http import ...

  9. python连接微信接口开发教程_Python调用微信公众平台接口操作示例

    本文实例讲述了Python调用微信公众平台接口操作.分享给大家供大家参考,具体如下: 这里使用的是Django,其他类似 # coding=utf-8 from django.http import ...

最新文章

  1. Spring Boot 定义接口的方法是否可以声明为 private?
  2. mysql设置了utf8mb4还是报错_第07期:有关 MySQL 字符集的 SQL 语句
  3. 【翻译】在Ext JS和Sencha Touch中创建自己定义布局
  4. Azkaban的介绍、安装与使用
  5. 一步一步学Silverlight 2系列(27):使用Brush进行填充
  6. 自己动手实现STL:前言
  7. 使用Dev-C++查看vector数组中的变量值
  8. UVALive 7077 Little Zu Chongzhi's Triangles (有序序列和三角形的关系)
  9. Android 面试总结~~~
  10. 八月份技术指标和个人指标
  11. 拓端tecdat|R语言近似贝叶斯计算MCMC(ABC-MCMC)轨迹图和边缘图可视化
  12. Scala进阶之路-I/O流操作之文件处理
  13. Android lollipop 更新问题
  14. DRG 与 ICD10 编码相关论文阅读分享
  15. java给数组排序_java数组如何排序
  16. 酒柜设计也可以很“特色”
  17. 驰为 hi12 linux,驰为Hi12 最适合入手的手写平板 真的可以试试
  18. excel两列数据对比找不同_眼睛的救星,Excel怎么快速找出两列数据的不同之处?...
  19. 5G无线关键技术 — 新型传输波形技术和先进编码与调制技术
  20. 不是python文件打开的合法模式组合是_以下选项中,不是Python文件打开的合法模式组合是:...

热门文章

  1. paddle版fnet_google
  2. python进程间通信的秘密
  3. Cenos7 部署asp.net core站点
  4. 利用T-SQL语句快速清理ZBLOG程序的SQL SERVER2012数据库内容
  5. 如何解决ORA-12547错误!
  6. VM虚拟机的配置文件(.vmx)损坏修复
  7. 【命令】usemod 的用法
  8. C# 读写文件方法总结
  9. 吐血实践 三核就是强过双核
  10. java IDE的四大金刚