それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

Rubyで作るプロキシサーバーの記事は動かなかった。

るびま初期の記事。

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
~