るびま初期の記事。
http://jp.rubyist.net/magazine/?0002-WEBrickProxy
コンテンツ書き換えが動かない。なんでかなーと思ってヘッダ見てみたら・・・
最近のWEBはGzip圧縮されてる。これが理由だね。
res.bodyはgzip圧縮されてるので、展開して圧縮し直さないと動かない。
Ruby初心者はハマるだろうなぁ。
書き直しておいた。
広告を除去したりする
bizmakoto.jpを対象にした。広告エリアがfooooooooooになる。
proxy.rb
1 #!/usr/bin/env ruby 2 KCODE='u' 3 4 require 'webrick' 5 require 'webrick/httpproxy' 6 require 'stringio' 7 require 'zlib' 8 9 handler = Proc.new(){ |req,res| 10 if res.header["content-encoding"] == "gzip" 11 Zlib::GzipReader.wrap( StringIO.new(res.body)) do |gz| 12 res.body=gz.read 13 end 14 end 15 16 if req.host == 'bizmakoto.jp' and res['content-type'] =~ %r!text/html! 17 res.body.gsub!(/<!-- ad_start_new -->.*?<!-- ad_end_new -->/m, 'fooooooooooooooo') 18 19 end 20 21 if res.header["content-encoding"] == "gzip" 22 Zlib::GzipWriter.wrap(io=StringIO.new) do |gz| 23 gz.write res.body 24 res.body = io.string 25 end 26 end 27 } 28 #プロキシサーバーをつくる 29 s = WEBrick::HTTPProxyServer.new({ 30 :Port => 8080, 31 :ProxyContentHandler => handler, 32 }) 33 34 #SIGINIを補足する 35 Signal.trap('INT') do 36 #補足したらシャットダウン 37 s.shutdown 38 end 39 40 #サーバー起動 41 s.start ~