monolithic kernel

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

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でばっちり動くのもすばらしい。

参考

おまけ