「Perl URLをエンコード」の版間の差分
ナビゲーションに移動
検索に移動
1行目: | 1行目: | ||
− | ==Perl URLをエンコード== | + | ==[[Perl URLをエンコード]]== |
http://sonic64.com/2003-08-31.html | http://sonic64.com/2003-08-31.html | ||
19行目: | 19行目: | ||
} | } | ||
− | ===== | + | =====httpdのログファイルから、IP、時間、U[[R]]L(デコードしたもの)を出力===== |
#!/usr/bin/perl | #!/usr/bin/perl | ||
# GETされたページを出力 | # GETされたページを出力 |
2020年2月16日 (日) 04:30時点における最新版
Perl URLをエンコード
http://sonic64.com/2003-08-31.html
エンコード
sub url_encode($) { my $str = shift; $str =~ s/([^\w ])/'%'.unpack('H2', $1)/eg; $str =~ tr/ /+/; return $str; }
デコード
sub url_decode($) { my $str = shift; $str =~ tr/+/ /; $str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; return $str; }
httpdのログファイルから、IP、時間、URL(デコードしたもの)を出力
#!/usr/bin/perl # GETされたページを出力 open IN, "</var/log/httpd/access_log"; while ($line = <IN>) { if ($line =~/^([0-9]{1,3}([.][0-9]{1,3}){3}).*\[(.+)\].*(GET[^"]+).*/) { $url = url_decode($4); print "$1\t$3\t$url\n"; } } close IN; sub url_decode($) { my $str = shift; $str =~ tr/+/ /; $str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; return $str; }
© 2006 矢木浩人