| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Perl URLをエンコード」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Perl URLをエンコード== http://sonic64.com/2003-08-31.html =====エンコード===== sub url_encode($) { my $str = shift; $str =~ s/([^\w ])/'%'.un…」)
 
22行目: 22行目:
 
  #!/usr/bin/perl
 
  #!/usr/bin/perl
 
  # GETされたページを出力
 
  # GETされたページを出力
  open IN, "</var/log/httpd/access_log";
+
  open IN, "&lt;/var/log/httpd/access_log";
  while ($line = <IN>) {
+
  while ($line = &lt;IN&gt;) {
 
   if ($line =~/^([0-9]{1,3}([.][0-9]{1,3}){3}).*\[(.+)\].*(GET[^"]+).*/) {
 
   if ($line =~/^([0-9]{1,3}([.][0-9]{1,3}){3}).*\[(.+)\].*(GET[^"]+).*/) {
 
     $url = url_decode($4);
 
     $url = url_decode($4);

2020年2月15日 (土) 08:05時点における版

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;
}