中国观鸟记录中心 - 活动报告 (birdreport.cn)这个是今天爬取的信息位置
我们来看一下她的包
在请求头这里可以看到有三个参数,sign,requestid,还有timestamp三个参数,其中timestamp估计是时间戳,另外的需要逆向
,接着这个请求的参数也是被加密的,需要逆向,返回的请求里面,这个data也需要我们进行解密,所以任务还是比较多的
我们去搜索处搜索了两个参数,显然这个sign不好找,我们就去找requestid
我们在这里面找到了参数,但是很长,我们看他前面是一个eval函数,那我们把它放到控制台里看一下
我们把这段js代码放到代码片段里面进行分析,放在源代码,里面的片段
那么很显然,他在headers里面设置了这三个值,分别是C,D,B
我们现在看了这个代码里面有的东西,发现我们需要找到md5的加密是不是普通的md5,需要找到这个e是什么东西,b.data又是什么东西,这里我们是在调用栈里找最后的一个发送请求,因为这个ajax是jquery的一个属性,可以理解为需要ajax做铺垫,而我们的调=调用栈里面,最后一个是一个jquery请求,我们去看一下,找一找有没有这个beforesetup,我们在这里打上断点并且调试,发现里面进去了就是这段代码,那么我们就可以让程序走到这里面,来看看这里面的东西都是什么
经过调试后,我们发现md5没有加盐,我们可以自己来实现这个功能,接着我们在控制台调试发现,这个b.data是一个urlencode处理的url
我们将字符串转化为这种格式,用quote,将字典转化为这种格式用urlencode
所以我们现在需要传入这种格式的数据作为参数,即可,但是这种参数不好传,因为我们不知道urlencode前的数据是什么,怎么办呢,我们在控制台看看datatojson这个函数
这里我们在province的时候可以我们可以打开工具看看是什么
那么我们解决了这个,就把我们需要的三个参数都解决了
那么解密的数据呢,我们在加密的地方看过了,在ajax发送之前,他就进行了beforesetup,那么我们估计ajax在这个栈之前发送,然后调用的这个,所以我们去前面找找
success返回的t就是返回值,我们进行调试,发现a.parseDate就是解密的函数,进去之后看得出是个aes加密,并且这个key和iv都有,我们就可以直接写python代码来还原了,那么本案到此结束