M.C.P.C.

―むり・くり―プラスコミュニケーション(更新終了)


| トップページ |

2011年4月 8日 23:20

WWW::Mechanizeでリダイレクト先URL取得

このエントリーをはてなブックマークに追加 mixiチェック

WWW::Mechanizeしている途中で、リダイレクト先のURLを得たいと思って、

use strict;
use warnings;
use WWW::Mechanize;
 
my $mech = WWW::Mechanize->new();
$mech->agent_alias( 'Windows IE 6');
my $url = 'http://example.com/hoge/';
my $redirected = _get_redirect_url( $url );
print "Location: $redirected\n" if $redirected;
 
exit;
 
sub _get_redirect_url {
  my $url = shift;
  $mech->get($url);
  my $newurl = $mech->uri();
  $mech->back();
  return $newurl;
}
 
__END__

上記のようなコードを書いたのだけれども、リダイレクト先が404を返すとエラーになる。よって、mechに入っているLWP::UserAgentを使用して、

use strict;
use warnings;
use WWW::Mechanize;
 
my $mech = WWW::Mechanize->new();
$mech->agent_alias( 'Windows IE 6');
my $url = 'http://example.com/hoge/';
my $redirected = _get_redirect_url( $url );
print "Location: $redirected\n" if $redirected;
 
exit;
 
sub _get_redirect_url {
  my $url = shift;
  my $r = new HTTP::Request( HEAD => $url );
  my $h = $mech->simple_request( $r );
  my $s = $h->code();
  if ( $s == 301 || $s == 302 ) {
    print "$s\n";
    return $h->header('Location');
  }
  return;
}
 
__END__

こんな感じにしてみた。

いつ使うんだこれ。

投稿 大野 義貴 [Perl] | |

トラックバック(0)

トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3550

コメントする