参考QQ群-Javascript高级爬虫-作者自建群,欢迎加入!awesome-java-crawler-作者收集的爬虫相关工具和资料反垃圾QQ群机器人-可以作为socket.io-client例程参考Socket.io与直接ws协议的连接方式有点不同之前用过,所以比较关心socket.io底层是怎么实现的。这时候就需要抓取nodejs的websocket了。这里记录一下研究经验。node.js端设置的不是浏览器抓包,而是node.js脚本程序抓包,所以需要在javascript代码中做一些修改,让socket.io客户端启用代理//constProxyAgent=require('https-proxy-agent')constProxyAgent=require('proxy-agent')constopts={传输:['websocket'],重新连接:true,//安全:true,//rejectUnauthorized:false,//agent:newProxyAgent('http://localhost:8888')agent:newProxyAgent('http://localhost:8888')}上面代码是用来抓ws的,如果是wss,需要开启注释,也就是换成https-proxy-agentFiddler端设置Fiddler默认不显示WebSocket流量,但是内置了相关功能。具体可以参考这篇文章简单总结一下流程如下:菜单Rules->CustomizeRules,打开Fiddler脚本编辑器,在Handlers类中添加一个静态方法OnWebSocketMessage,代码如下,然后保存staticfunctionOnWebSocketMessage(oMsg:WebSocketMessage){//LogMessage到LOG选项卡FiddlerApplication.Log.LogString(oMsg.ToString());}界面显示可以看到我们的socket.io请求已经被捕获了。原来是在代码中传入的接入点地址后添加了/socket.io/?EIO=3&transport=websocket。如果想查看websocket传输的每一帧数据,可以双击这个requestRecord,右边会自动打开WebSocket面板,里面是Frame数据,左边的上下箭头表示流向的数据,无论是从C到S还是从S到C,右下角是完整的数据。见图片:
