簡易Proxy
直リンで画像を呼び出すと相手に負荷がかかるってことで、それ用のProxy。
意味あるかは不明
参考は
Apache拡張ガイド 上下巻
http://search.cpan.org/author/GAAS/libwww-perl-5.65/
あたり。
package EasyProxy; use strict; use Apache::Constants qw(:common); use Apache::URI; use HTTP::Date; use Digest::MD5 qw(md5_hex); use LWP::UserAgent; use Data::Dumper; sub handler{ my $r = shift; my $uri=$r->parsed_uri->query(); return 404 unless $uri; my $digest = md5_hex($uri); my $last_modified = (-f "/tmp/_$digest") ? (stat("/tmp/_$digest"))[9] : 0; #もしブラウザがIf-Modified-Sinceを送ってきていて、 #If-Modified-Since < Last-Modified の場合 → 解凍して200 #If-Modified-Sinceが存在 && 4時間以内 -> 304 my $if_last_modified=($r->header_in("If-Modified-Since")) ? str2time($r->header_in("If-Modified-Since"),"+0900") : 0; if($last_modified>$if_last_modified){ open(FH,"/tmp/_$digest"); my $VAR1; my $dump = join("",<FH>); close(FH); my $res = eval($dump); unless($@){ my $header = $res->headers; $r->content_type($header->content_type); $r->header_out("Last-Modified"=>time2str((stat("/tmp/_$digest"))[9])); $r->send_http_header; print $res->content; return OK; } }elsif($if_last_modified && time - $last_modified < 60*60*4){ return 304; } my $ua = LWP::UserAgent->new(); my $req = HTTP::Request->new(GET=>$uri); my $res = $ua->request($req); #200と304とそれ以外 if($res->code eq "200"){ my $header = $res->headers; $r->content_type($header->content_type); $r->header_out("Last-Modified"=>time2str(time())); $r->send_http_header; print $res->content; #保存 open(FH,"> /tmp/_$digest"); print FH Dumper($res); close(FH); return OK; }elsif($res->code eq "304"){ return 304; }else{ return $res->code; } } 1;
httpd.confに
PerlModule EasyProxy <Location /EasyProxy> SetHandler perl-script PerlHandler EasyProxy </Location>
んで、
http://hogehoge/EasyProxy?取得したい画像URL
で完了