访问这个url,抓包https://www.hxzq.cn/index.php?id=rzrq&cate=ywgg
可以看到响应中并没有公告里的数据
数据到哪里去了呢?首先考虑会不会是xhr请求,然后页面渲染呢?对于这个网页来说的话,不是
看到有一个websocket请求,请求将通信协议升级成websocket
1 | GET wss://www.hxzq.cn/1ywuKELSO2ahQuWZ/pr/ltijkE3r4JaiBRIwpGryA7mxZbqq7ul6r0Kdyj_sDtQ%3D/b/ws/4gzbq19tge/7e03e518-fdb0-41d3-a4fc-c70b4857f23f HTTP/1.1 |
这里的Sec-WebSocket-Key通常是随机生成的
websocket协议是一个长链接,什么意思呢?HTTP/S请求,可以理解成一次一结算,一个链接就对应一个返回的数据,但是websocket协议,是一个链接,只要这个链接不断开,可以返回多个数据,从控制台也可以看出来
对于这个网站,websocket返回的数据是没有加密的
websocket的发送数据用sendMessage,注册事件用onMessage事件
根据函数栈定位到sendMessage的地方
往下找找到onMessage函数,打上断点,可以看到断下来的时候,网页没有任何显示,这也说明在发送websocket请求之前,我们需要的数据是没有加载的
不断循环,可以看到不停的在这个地方断下来,可以加上条件断点,输入console.log(JSON.stringify(t.data)); false; ,第二个false相当于这个断点的条件永远返回false,也就是永远不会在这里断下来,相当于在断点的位置插入了一句JSON.stringify(t.data) 的代码
直接运行,可以看到控制台输出了很多数据
可以看到返回的数据中有#text的数据是我们需要的,而且是url编码,可以使用decodeURIComponent去解码
可以在条件断点处加上判断
1 | let xxx = JSON.stringify(t.data); if(xxx.indexOf("#text") !== -1) {console.log(decodeURIComponent(t.data[5]));} console.log(xxx); false; |
然后可以在控制台看到解码之后的数据,也就是我们需要的文章标题,还有文章的url
如果前端返回的数据是加密的,就需要逆向js去解密了









