2017-01-12 4 views
0

http-proxyを使用してWebソケットをプロキシしたい場合は、受信データをログに記録できますが、送信データをプロキシから取得できません。どのようにできるのか ?ノードhttp-proxy経由でwebsocketトラフィックデータをログに記録する方法

#!/usr/bin/env node 

var wstarget = 'ws://localhost:8080/?r='+(Date.now()/1000 | 0); 

var httpProxy = require('http-proxy'); 
var http = require('http'); 

var proxy = httpProxy.createProxyServer({}); 

proxy.on('open', function (proxySocket) { 
proxySocket.on('data', function (data) { 
    //console.log('\n'+data); 
    console.log('',data); // Just log the receive data! Can't get the Send data? 
}); 
}); 

var server = http.createServer(); 

server.on('upgrade', function (req, socket, head) { 
    console.log("Proxying websocket connection to "+wstarget); 
    proxy.ws(req, socket, head, { 
    target: wstarget, 
    changeOrigin: true, 
    ws: true}); 
}); 

server.listen(8881); 

答えて

0

回答が見つかりました!

... 

var WsParser = require('simples/lib/parsers/ws'); // npm install simples 

proxy.on('open', function (proxySocket) { 
proxySocket.on('data', function (data) { 
    console.log('Down:'+data); 
    console.log('',data); 
}); 

}); 

proxy.on('proxyReqWs', function(proxyReq, req, socket, options, head) { 

    var parser = new WsParser(0, false); 

    socket.pipe(parser); 

    parser.on('frame', function (frame) { 
     // handle the frame 
     console.log('Up:',frame); 
     console.log('Up data:'+frame.data); 
     /* 
     The structure of a frame: 
     { 
      data: buffer, 
      fin: boolean, 
      length: int, 
      masked: boolean, 
      opcode: int 
     } 
     */ 
    }); 

}); 

... 
関連する問題