Node.js でプロキシっぽいの
Node.js を使って、任意のWebサーバからコンテンツを取ってくるコードを書きました。しかし、その後に手を出した jsdom モジュールでは直接コンテンツを取得出来る(jsdom に渡すためにこれ書いたのに)という・・・
それはさておき。初めて Node.js を触ってそれなりに苦労したし、connect モジュール使ったサンプルコードはあまりないかも?ということでここに残しておきます。
var connect = require('connect'), http = require('http'), url = require('url'), target_url; connect() .use(connect.logger('dev')) .use(function(req, res, next) { // do something next(); // required !!! }) .use(function(req, res) { // 'next' not required var paths = req.url.split('/') if (paths.length > 1) target_url = decodeURIComponent(paths[1]); var target = url.parse(target_url); var request = http.get( target_url, function(response) { var buf = []; response .on('data', function(chunk) { buf.push(chunk); }) .on('end', function() { var content = buf.join(); res.end(content); }) .on('error', function(e) { console.error('ERROR: ' + e.message); }); } ).on('error', function(e) { console.error('ERROR: ' + e.message); }); }) .listen(3000);
動作確認は・・・
$ node (ファイル名).js
の後、ブラウザから
http://(IPアドレス。"localhost"不可):3000/http%3A%2F%2Fweather.yahoo.co.jp%2Fweather%2F/
とかで。
必要無いコードも含まれていますが、Node.jsの使い方の参考になれば。
返ってきたコンテンツに含まれる相対URLのファイルが取得出来なかったり、charsetがUTF-8じゃないと文字化けしたりと改善の余地はいろいろありますが、そこはよしなに。