如何在Phantom.js中监控WebSocket通信?[英] How to monitor WebSocket communication in Phantom.js?

问题描述

Phantom.js 文档展示了如何监控 HTTP 通信:http://phantomjs.org/network-monitoring.html

但是,它不适用于 WebSocket.如何在 Phantom.js 中监控 WebSocket 通信?

推荐答案

PhantomJS 1.x 不支持 WebSockets1,所以你无法监控它们.如果页面对 WebSockets 使用了一些后备,那么 page.onResourceRequestedpage.onResourceReceived 可用于记录元数据的消息.PhantomJS 不会以任何方式暴露实际发送的数据.

WebSockets 在 PhantomJS 2 中正常工作.由于不需要回退,因此不可能观察这些事件的流量.上面提到的事件处理程序不显示任何内容.查看消息的唯一方法是尽早代理 WebSocket 对象:

page.onInitialized = function(){
    page.evaluate(function(){
        (function(w){
            var oldWS = w.WebSocket;
            w.WebSocket = function(uri){
                this.ws = new oldWS(uri);
                ...
            };
            w.WebSocket.prototype.send = function(msg){
                w.callPhantom({type: "ws", sent: "msg"});
                this.ws.send(msg);
            };
            ...
        })(window);
    });
};
page.onCallback = function(data){
    console.log(JSON.stringify(data, undefined, 4));
};

1 我的测试实际上表明 websocket echo page 有效v1.9.6 及更高版本,但不是 v1.9.0.

本文地址:https://www.itbaoku.cn/post/1739856.html