1.抓包看看需要什么参数选中的数据包有点可疑

请求的urlpost的参数

并且返回了这个内容
我们用fiddler抓包看到具体的设置cookies等过程


第一次请求返回了一个setcookie,

第二次请求带上了第一次返回的cookies,有两个有用的BAIDUID , FG
其他的是浏览器设置的,不用理会

刷新就知道了,只有sign和token两个参数是变化的,query是每次请求的字符串, langdetect是检测语言的,
语言检测不用管,用python实现很容易

2.分析sign

全局搜索sign, 有点多,还是打断点吧,打一个xhr断点


输入内容会直接断下来,查看堆栈

设置断下的url是:https://fanyi.baidu.com/v2transapi?from=en&to=zh
查看堆栈,很明显send, ajax,这两个不是,


向上一看,


和请求的 完全一样
先追sign

点进去

把函数粘贴进去,运行,让他报错


在这打两个断点,然后看i是什么东西,
==不要在那直接框住,看i,==这样是错误的

可以多刷新几次,可以发现这玩应是个定值

运行,报错

n就在他上面,把他复制进去,放在e函数上面,

然后就发现就可以运行了,
sign就抠出来了,

3.token分析

发现他是在window.common.token
透露一下,window.common.token一般这种window.xxx.xxx一般是服务器返回的数据

总共有26个,不多,挨个找,
然后就会发现找不到!!!!
转全局搜素

发现在index页面,结合一开始的抓包分析
试着写一下代码

def user_agent():ua = ['Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36','Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36','Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36','Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36','Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36']return random.choice(ua)url = "https://fanyi.baidu.com/"
session = requests.session()
headers = {'User-Agent': user_agent(),'Host': 'fanyi.baidu.com','sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90",','sec-ch-ua-mobile': '?0','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-User': '?1',
}
resp = session.get(url, headers=headers).content.decode()
res = session.get(url, headers=headers).content.decode()

第二个res,就可以返回数据了。而且里面有token
然后用正则提取一下

token = re.findall(r"token: '(.*)',", res, re.M)[0]

调用execjs获取sign

with open('baidufy.js', 'r', encoding='utf-8')as fp:js = fp.read()sign = execjs.compile(js).call('SDK', query)

检测输入的语言

query_lang = 'en' if 40 < ord(query[0:1]) < 91 or 96 < ord(query[0:1]) < 123 else 'zh'
trans_lang = 'en' if query_lang == 'zh' else 'zh'

构造data

data = {'from': query_lang,'to': trans_lang,'query': query,'transtype': 'realtime','sign': sign,'token': token,'domain': 'common'
}
url = "https://fanyi.baidu.com/v2transapi?from={}&to={}".format(query_lang, trans_lang)
req = session.post(url, headers=headers, data=data)
decode = req.content.decode('gbk','ignore')
loads = json.loads(decode)
res = loads['trans_result']['data'][0]['dst']
print(decode)
print(res)

全部代码

#!usr/bin/env python
# coding:utf-8
"""@File  :baidufy.py@Author:小生@date  : 2021-05-15 11:57
"""
import json
import zlibimport requests
import re
import random
import execjsquery = "may"
def user_agent():ua = ['Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1464.0 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.3319.102 Safari/537.36','Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36','Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36','Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6','Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1468.0 Safari/537.36','Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2224.3 Safari/537.36','Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36']return random.choice(ua)url = "https://fanyi.baidu.com/"
session = requests.session()
headers = {'User-Agent': user_agent(),'Host': 'fanyi.baidu.com','sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="90", "Google Chrome";v="90",','sec-ch-ua-mobile': '?0','Sec-Fetch-Dest': 'document','Sec-Fetch-Mode': 'navigate','Sec-Fetch-User': '?1',
}
resp = session.get(url, headers=headers).content.decode()
res = session.get(url, headers=headers).content.decode()
token = re.findall(r"token: '(.*)',", res, re.M)[0]
with open('baidufy.js', 'r', encoding='utf-8')as fp:js = fp.read()sign = execjs.compile(js).call('SDK', query)query_lang = 'en' if 40 < ord(query[0:1]) < 91 or 96 < ord(query[0:1]) < 123 else 'zh'
trans_lang = 'en' if query_lang == 'zh' else 'zh'
data = {'from': query_lang,'to': trans_lang,'query': query,'transtype': 'realtime','sign': sign,'token': token,'domain': 'common'
}url = "https://fanyi.baidu.com/v2transapi?from={}&to={}".format(query_lang, trans_lang)
req = session.post(url, headers=headers, data=data)
decode = req.content.decode('gbk','ignore')
loads = json.loads(decode)
res = loads['trans_result']['data'][0]['dst']
print(decode)
print(res)

query里面放的是要查询的数据

超详细百度翻译js逆向(token 和 sign)相关推荐

  1. 【爬虫逆向案例】某道翻译js逆向—— sign解密

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! [爬虫逆向案例]某道翻译js逆向-- sign解密 1.前言 2.步骤 3.源码 4.号外 1.前言 相信各位小伙 ...

  2. 【JS逆向百题斩】百度翻译接口逆向

    百度翻译逆向爬虫 网站链接 https://fanyi.baidu.com/?aldtype=16047#auto/zh 接口链接 https://fanyi.baidu.com/v2transapi ...

  3. 百度翻译参数逆向过程

    翻译网站sign参数逆向 网址:aHR0cHM6Ly9mYW55aS5iYWlkdS5jb20v JS调试 加密参数sign: 使用XHR断点 再查看方法调用栈 很容易定位到加密函数 经测试,原来就是 ...

  4. win7中Android开发环境搭建超详细(百度)

    Android系统如火如荼,Android软件开发也相当流行,这里介绍如何一步步完成Android软件开发环境的搭建. 工具/原料 能联网的计算机 Java环境搭建 1 Android软建开发用的是J ...

  5. 超详细的Node.js瓦片拼接教程:从原理到实战,助你轻松完成地图应用开发

    Node.js 瓦片拼接,是一项常用于地图应用开发的技术.本篇博客将从原理和实战两个方面介绍 Node.js 瓦片拼接的基本知识和技术要点: 一.什么是瓦片拼接? 瓦片拼接又称瓦片合成,是指将&quo ...

  6. dropzone.js php,超详细版Dropzone.js上传插件的使用实例-适用tp

    其实一直都再找一款上传插件,但是今天遇到了一款相对比较好的插件,干净纯洁. [![](https://cdn.micuer.com/data/upload/20210121/60091f0d95453 ...

  7. python爬虫JS逆向加密破解之百度翻译

    最近在从基础学习JS逆向,来分享一下百度翻译JS逆向的整个过程,也有助于自己加深记忆. JS逆向可以说是爬虫工程师必备的知识点了,但是如果对前端知识不够了解还是学起来很有难度的. 想学习的话可以在B站 ...

  8. JS逆向之巨量创意signature签名

    文章目录 目标网站 接口分析 定位_signature生成位置 补环境还原js 编码测试 往期逆向文章推荐: JS逆向之百度翻译 JS逆向解析之有道翻译 JS逆向之企名科技 JS逆向之人口流动态势 j ...

  9. JS逆向之巨量星图sign签名

    文章目录 1. 目标网站 2. 初步抓包分析 3. 定位加密参数生成位置 4. 编码测试 往期逆向文章推荐: JS逆向之百度翻译 JS逆向解析之有道翻译 JS逆向之企名科技 JS逆向之人口流动态势 j ...

最新文章

  1. Linux下快速安装TensorFlow的教程
  2. python培训比较好的机构-西安比较好的python培训机构推荐
  3. Java基础笔记18
  4. Hadoop -- ES -- CURD
  5. SELINUX导致的SSH密匙无法创建和访问的问题
  6. 跨考计算机报班,考研跨考的经验总结与分享
  7. 从数学到计算机 从莱布尼兹到冯诺依曼 从数理逻辑到算法分析
  8. 深度神经网络移动终端GPU加速实践
  9. Hash碰撞的解决方案
  10. 各种前端开发工具 - 你用过几种?
  11. find 命令详解 基于文件大小,名字和权限等的查找策略以及-path和-prune的详细解释
  12. 盘点国内最具实力的双足仿人机器人研发团队有哪些?
  13. linux 修改网卡 mac地址命令,Centos系统下查看和修改网卡Mac地址(附ifconfig命令格式)...
  14. Rabbitmq关于guest用户登录失败解决方法
  15. 大数据时代电视剧市场的价值观转型
  16. 如果我恨一个人,我就领他到中关村买相机。
  17. excel公式不自动计算_公式 | Excel根据起止日期,自动计算每月的计息天数
  18. flutter 开发中问题盘锦
  19. PCB中贴片元件封装焊盘尺寸的规范
  20. 添加列、删除列的sql

热门文章

  1. java 数据库并发访问_java – 提供IllegalStateException的并发数据库访问
  2. 网页|如何制作一个HTML网页
  3. 在ios手机上图片之间存在白色间隙
  4. 【Vim】更改Vim编辑器的字体大小、改变字号;永久改变字号;改变字体颜色、字体显示样式
  5. Windows Server 2012打开端口
  6. MFQ-PPDCS测试分析和测试设计 - 感觉有点虚,落地还是要结合实际工程应用
  7. ZDT_X57步进闭环驱动说明书Rev1.3
  8. Cocos2d-x 3.0坐标系详解
  9. atd和crond两个任务管理程序的区别
  10. 通信网络的组成与功能