response = requests.post(url,data=data,headers=headers) # data :post数据(Form表单数据-字典格式)
3.请求方式特点
GET请求 : 参数在URL地址中有显示 POST请求: Form表单提交数据
有道翻译破解案例(post)
1.目标
破解有道翻译接口,抓取翻译结果 # 结果展示 请输入要翻译的词语: elephant 翻译结果: 大象 ************************** 请输入要翻译的词语: 喵喵叫 翻译结果: mews
2.实现步骤
1、浏览器F12开启网络抓包,Network-All,页面翻译单词后找Form表单数据 2、在页面中多翻译几个单词,观察Form表单数据变化(有数据是加密字符串) 3、刷新有道翻译页面,抓取并分析JS代码(本地JS加密) 4、找到JS加密算法,用Python按同样方式加密生成加密数据 5、将Form表单数据处理为字典,通过requests.post()的data参数发送
具体实现
1.开启F2抓包,找到Form表但数据如下:
i: 喵喵叫 from: AUTO to: AUTO smartresult: dict client: fanyideskweb salt: 15614112641250 sign: 94008208919faa19bd531acde36aac5d ts: 1561411264125 bv: f4d62a2579ebb44874d7ef93ba47e822 doctype: json version: 2.1 keyfrom: fanyi.web action: FY_BY_REALTlME
2.在页面中多翻译几个单词,观察Form表单数据变化
salt: 15614112641250 sign: 94008208919faa19bd531acde36aac5d ts: 1561411264125 bv: f4d62a2579ebb44874d7ef93ba47e822 # 但是bv的值不变
3.一般为本地js文件加密,刷新页面,找到js文件并分析JS代码
# 方法1 Network - JS选项 - 搜索关键词salt # 方法2 控制台右上角 - Search - 搜索salt - 查看文件 - 格式化输出 # 最终找到相关JS文件 : fanyi.min.js
4.打开JS文件,分析加密算法,用Python实现
# ts : 经过分析为13位的时间戳,字符串类型 js代码实现: "" + (new Date).getTime() python实现: str(int(time.time()*1000)) # salt : ts + 0-9之间的随机数 js代码实现: ts+parseInt(10 * Math.random(), 10); python实现: ts + str(randow.randint(0-9)) # sign(设置断点调试,来查看 e 的值,发现 e 为要翻译的单词) js代码实现: n.md5("fanyideskweb" + e + salt + "n%A-rKaT5fb[Gy?;N5@Tj") python实现: from hashlib import md5 string = "fanyideskweb" + e + salt + "n%A-rKaT5fb[Gy?;N5@Tj" s = md5() s.update(string.encode()) sign = s.hexdigest() #bv 不变的值,不需要处理,直接复制
5.代码实现