爬虫:对网站加密请求的分析
引语:
最近因为有一些需求,需要对某些网站的数据进行抓取然后分析用户的行为之类的.所以对遇到的一些问题进行一个记录,第一次处理这种加密的请求,
也花费了自己不少时间,做一个处理过程的记录.给有类似需求的朋友也增加一个可参考的资料.
分析步骤:
1.首先是要看请求的url大致样子是
这里是一个get请求,uri的组成是:网站域名+api地址+analysis参数.
加密的部分其实就是这个analysis,这个网站有get和post的请求,但是都会在参数里面加一个analysis参数,用来区分是
内部调用还是其他人的请求.所以咱们只要破解了这个参数的生成规则,就可以拿到这个网站的数据了.
2.因此我们找找看能不能从网站的js文件或者哪里找出这个拼接参数加密的规则,就从第一个的请求参数开始,我们处于开发者模式下,点击Network,然后选择第一个接口,点击Initiator.
会跳转到对应的js中.这时候发现js是压缩的,点击chrome开发者工具自带的格式化代码
格式代码后,我们就方便查看加密规则是从哪里来的了.
3.这时候我们可以在Network右边的侧边栏加入XHR breakPoint,
将我们前面的url中的关键字添加进来,然后刷新页面,当再次请求到这个url的时候,就回进入到这个断点中
左边就是代码中各种参数的变量,值等,右边就是调用栈,我们可以一步步从中去找寻参数是从哪里加密的.
4.这个网站的js里面的函数对于我一个后端来说讲道理,有些难读懂,我是从参考了网上一些大神的资料,然后从最初的一个调用栈一个个网上查看传递的参数是什么,来查看到底是哪一步进行的加密.
这个过程很花时间,js文件中有很多很多匿名函数,调试的时候没法一步步全部看完,主要是要找传参的问题,对比发现图中两个调用栈中的参数中有一个没有analysis参数,说明加密是在另一个调用栈中完成的.于是乎定位到了是在get这个调用中加密的,
知道了在哪个文件中加密的就好办了.
5.我们在刚才的get调用这个里面打上断点一步步调试看看参数值
这里其实可读性也挺差的,我们可以将鼠标选中自己要查看的参数一步步推出来大致的加密过程
这里也是要花不少时间,推算出来
结果:
最后翻译为java代码大概是这样