Proxy CGI

リクエストの請求を肩代わりするCGI。別名、Web Proxy。

原理はとっても簡単。見たいページのURLを渡してもらって、それを取得して返すだけ。

だから、最初はこんなんを書いた。

#!/usr/local/bin/ruby
require 'cgi'
require 'open-uri'
cgi = CGI.new
print "Content-type: text/html?n?n"
open(cgi['url']){|io|
  print io.read
}


でもこれだと、リンクを辿れないし、画像も表示できない。だから、ちょっといじっくってやる。

#!/url/local/bin/ruby
require 'cgi'
require 'uri'
require 'open-uri'
cgi = CGI.new

url = cgi['url']
if cgi['escape'] == 'true' then
  url = CGI.unescape(cgi['url'])
end
base = URI.parse(url)

print cgi.header("type"=>"text/html")
open(url){|io|
  content = io.read
  content.gsub!(/(href|src)="([^"]+)"/){
    link = 'error'
    if $2 then
      link = base+$2
    end
    %(#{$1}="http://#{cgi.host}#{cgi.script_name}?url=#{CGI.escape(link.to_s)}&escape=true")
  }
  print content
}

# あー、これの目的とかは聞かないで。事情を察してください。