monolithic kernel

Node.jsで作るプロキシサーバ

May 18, 2012

    Node.jsを使うとプロキシサーバを簡単に書くことができます。

    こんな感じで。

    var url  = require('url'),
        http = require('http');
    
    var port = 1234;
    
    http.createServer(function(serverRequest, serverResponse) {
      var requestUrl = url.parse(serverRequest.url);
      var body = [];
    
      console.log(requestUrl.href);
    
      serverRequest.on('data', function(data) {
        // リクエストボディを受け取る
        body.push(data);
      });
      serverRequest.on('end', function() {
        // クライアントから受け取った通りにリクエスト
        var request = http.request({
          host:    serverRequest.headers.host,
          port:    requestUrl.port || 80,
          path:    requestUrl.path,
          method:  serverRequest.method,
          headers: serverRequest.headers
        },
        function(response) {
          serverResponse.writeHead(response.statusCode, response.headers);
          response.on('data', function(chunk) {
            // 受け取ったデータをクライアントへ送り返す
            serverResponse.write(chunk);
          });
          response.on('end', function() {
            serverResponse.end();
          });
        });
        if(body.length > 0) {
          request.write(body.join(''));
        }
        request.end();
      });
    }).listen(port);

    もちろんこれ自体には意味はありませんが、リクエストやレスポンスを自由にいじって遊ぶことができます。といっても、ブラウザの拡張機能でも大体のことができてしまうので、活躍する状況は限られると思われますが。

    Node.js、まじめに使う場合にはいろいろな意見があるでしょうが、少なくとも簡単なサーバを書くには楽でいい環境だと思いました。Windowsでばっちり動くのもすばらしい。

    参考

    おまけ