首先本篇文章的主要目的是了解websocket协议,并将其使用在爬虫领域
什么是websocket
websocket(简称ws)是一个基础tcp连接的通信协议,通过http(一次握手)建立连接,与http协议最大不同的是: websocket是全双工通信
,服务器可以主动向客户端发送消息,而http1.1是半双工,只能等待客户端请求给响应。
协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。
ws://example.com:80/some/path
那么与爬虫又有什么关系呢?
在web爬虫,我们经常会JavaScript逆向分析一个参数的生成,大部分的做法是把相关代码扣到本地调试分析,补充浏览器环境,使用node开发一个express接口,供爬虫调用。
使用了websocket之后,我们只需找到参数加密函数入口,使用中间人攻击方式向浏览器注入js(让浏览器成为websocket客户端),使用python编写websocket服务端,并开发一个api,爬虫向这个api提交参数,该api将参数转给服务端函数,服务端将参数发送给浏览器(前面注入的js),浏览器拿到参数,会调用加密函数对参数进行处理,得到结果返回给服务端。
websocket的使用
1. 客户端API
使用JavaScript实现,使用中间人攻击将这段脚本注入
阮大写的很全,这里做简单记录
// 创建一个websocket实例
var ws = new WebSocket('ws://localhost:8080');
- webSocket.onopen 用于指定
连接成功后
的回调函数 - webSocket.onclose 用于指定
连接关闭后
的回调函数 - webSocket.onmessage 用于指定
收到服务器数据后
的回调函数 - webSocket.send 用于向服务器发送数据
- webSocket.readyState 返回实例对象的当前状态
具体案例
haha
服务端API
使用python实现
网友评论