美文网首页
百度翻译之sign破解

百度翻译之sign破解

作者: timewlss | 来源:发表于2019-03-08 08:38 被阅读0次

    本文只做技术交流,如有侵犯,请联系我删除 


    这两天闲来无事,拿出之前写的百度翻译代码,试着运行了一下,不出意外,报错了。国内比较大的翻译平台,比如有道、百度为了防止被pa,会经常改变其fanpa的策略,可以说稍微有那么一点点烦人,当然这肯定难不倒广大的it guys,在网上找了很多资料之后,终于完整的解决了百度翻译最新的fanpa策略。

    第一步、url分析

    首先我们按F12或者右键选检查,进入chrome的调试窗口,选择network,会发现底下底下弹出了一大推的请求,为了方便我们找到翻译时候到底请求的是哪个接口,我们点击红色原点右边的按钮,清掉所有请求,然后点击翻译,此时发现就只发出了两个请求

    点击其中一个请求,比如langdetect,我们发现请求的url是https://fanyi.baidu.com/langdetect,并且请求方式是POST,返回值是一个json格式的字符串,json字符串我们可以借助第三方格式化小工具校验。往下看,发现Form Data竟然只有一个参数query,并且使我们需要翻译的词语孩子,根据返回值的内容,于是我们大胆猜测,langdetect请求是接收需要翻译的内容,判断语种。

    然后就可以开心的写代码了,使用比较简单好用的requests包,拿到返回值'zh',代码如下:

    单后我们点击v2transapi,我们发现请求地址是https://fanyi.baidu.com/v2transapi,在观察Form Data和返回值,得出结论,这个请求是把第一次的请求得到的'zh',当做参数,然后去请求,得到一个比较复杂的json字符串,经过第三方格式化,仔细观察后发现,翻译的结果,是‘dst’对应的值,

    第二步、获取翻译后的数据

    经过前面的分析,我么得出结果,百度翻译经过两次请求,得到了最后的翻译结果,我们的代码也就需要请求两次,使用面向对象的思想,开始写完剩下的代码。部分代码如下:

    写完后发现我么翻译孩子时正常,但是,翻译其他内容就会报错,查看了好几遍代码,代码没有任何错误,百思不得姐,于是向强大的百度求助,最终找到了答案 。

    第三步、sign破解

    最终,找到了如下的解决办法:
    使用百度翻译API遇到的sign问题 - KeYY的博客 - CSDN博客

    百度翻译最新的fanpa措施是利用js代码在每次翻译的时候利用前端生成一个唯一的sign值,比较难以解决的是,我么的后端代码如何运行js代码,并且生成一个唯一的sign值??还好我们有强大的第三方包,完美的解决了这个问题。

    利用第三方包,每次生成一个唯一的sign值,然后将其拼接 在Form Data中,然后请求数据。

    第四步、完善代码

    如上图所示,我在拼接Form Data时,利用三元表达式,简单的判断一下'from’和'to'的值,就可以实现英汉之间的互译,使代码强大了很多。

    第五步、结束语

    一个小小的尝试就可以是一个大大的成功,希望可以在爬虫的路上一起走的更远。

    码云源码地址:wanglong/百度翻译

    相关文章

      网友评论

          本文标题:百度翻译之sign破解

          本文链接:https://www.haomeiwen.com/subject/jldlpqtx.html