WEBrickで遊ぶ
今日は会社の忘年会兼コーディングパーティです。何をするかというと、日中は社員みんなで集まって各自コーディングして成果発表、そのまま夜は酒を呑む、という感じ。僕の会社は皆社外に出ていて集まることがほとんど無いので、たまにこういうことやると楽しいです。
僕も久しぶりにコーディング。WEBrickで遊んでみます。
まずはWebServerとして使ってみる。
おーすごいすごい。
じゃあ次はProxyにしてみる。
すげぇ、7行でProxyサーバが出来た。
Rubyist Magazine - WEBrickでプロキシサーバを作って遊ぶを参考にフィルタ作る。
PerlがRubyに置き換わりました。おもしろい。
僕も久しぶりにコーディング。WEBrickで遊んでみます。
まずはWebServerとして使ってみる。
#!/usr/bin/ruby -Ku
require 'webrick'
#includeしてしまえばWEBrick::は省略可能
#include WEBrick
# HTTP Serverオブジェクトを生成
s = WEBrick::HTTPServer.new(
# DocumentRootをカレントに
:DocumentRoot => Dir::pwd,
# defaultはstderr,stdoutにCombined形式で出力
:AccessLog => [[ $stdout, WEBrick::AccessLog::COMBINED_LOG_FORMAT ],],
# WEBrick自体のログを取得。
:Logger => WEBrick::Log::new("log.txt",WEBrick::Log::DEBUG),
# Portを指定
:Port => 10080
)
# FileHandlerでファイルをマウントする
s.mount("/test", WEBrick::HTTPServlet::FileHandler, "./test/test.html")
# CGIHandlerでCGIをマウント、実行させる
s.mount("/hoge.pl", WEBrick::HTTPServlet::CGIHandler, "./hoge.rb")
# Servletでコンテンツを返す。かつBasic認証させる。
class Hello < WEBrick::HTTPServlet::AbstractServlet
def do_GET(req,res)
WEBrick::HTTPAuth.basic_auth(req,res, "Realm") {|user,pass|
user == 'webrick' && pass == 'webrick'
}
res.body = "authenticate"
end
end
s.mount("/hello",Hello)
# Ctrl+Cでシャットダウンさせる
trap("INT") { s.shutdown }
# HTTP Server 起動
s.start
おーすごいすごい。
じゃあ次はProxyにしてみる。
#!/usr/bin/ruby -Ku
require 'webrick/httpproxy'
s = WEBrick::HTTPProxyServer.new(
:Port => 10088
)
trap("INT") { s.shutdown }
s.start
すげぇ、7行でProxyサーバが出来た。
Rubyist Magazine - WEBrickでプロキシサーバを作って遊ぶを参考にフィルタ作る。
#!/usr/bin/ruby -Ku
require 'webrick/httpproxy'
handler = Proc.new() {|req,res|
if res['content-type']=~/text\/html/
res.body.gsub!(/Perl/m,'Ruby')
end
}
s = WEBrick::HTTPProxyServer.new(
:Logger => WEBrick::Log::new("proxy.log",WEBrick::Log::DEBUG),
:Port => 10088,
:ProxyContentHandler => handler
)
trap("INT") { s.shutdown }
s.start
PerlがRubyに置き換わりました。おもしろい。