2

perl Mechanize(WWW :: Mechanizeを使用してhttp応答から301/302リダイレクトの場所を取得しようとしましたが、response->headerなどを使用して応答からそれを抽出する際に問題が発生しました。

誰かが301または302リダイレクトを使用するWebサイトからのhttp応答からリダイレクト場所を抽出するのを手伝ってもらえますか?

以前にMechanizeでより複雑なことを行ったので、このリダイレクトロケーションURLを取得したら、何をしたいのか、どのように行うのかはわかっていますが、ロケーション(またはその他の応答フィールド)を取得する際に実際の問題が発生しています。 http応答。

よろしくお願いします、CMありがとうございます

4

2 に答える 2

5

WWW :: Mechanizeは自動的にリダイレクトに従う必要があるため(経由しないように指示した場合を除く requests_redirectable)、何もする必要はありません。

編集:デモンストレーションのためだけに:

DB<4> $mech = WWW::Mechanize->new;

DB<5> $mech->get('http://www.preshweb.co.uk/linkedin');

DB<6> x $mech->uri;
0  URI::http=SCALAR(0x903f990)
  -> 'http://www.linkedin.com/in/bigpresh'

...ご覧のとおり、WWW :: Mechanizeはリダイレクトに従い、自動的に宛先に到達しました。

要求に応じて別の例で更新:

DB<15> $mech = WWW::Mechanize->new;

DB<16> $mech->get('http://jjbsports.com/');

DB<17> x $mech->uri;
0  URI::http=SCALAR(0x90988f0)
 -> 'http://www.jjbsports.com/'
DB<18> x substr $mech->content, 0, 40;
0  '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML'
DB<19> x $mech->title;
0  'JJB Sports | Trainers, Clothing, Football Kits, Football Boots, Running'

ご覧のとおり、リダイレクトに従い、$mech->contentページのコンテンツを返しています。それはまったく役に立ちますか?

于 2012-08-22T18:13:29.207 に答える
1

リダイレクトの場合は、リダイレクトURLをたどるときにWWW::Mechanize使用$mech->redirect_ok();します(これはLWPメソッドです)。request()

ノート -

WWW::MechanizeのコンストラクターPOSTがエージェントのrequests_redirectableリストにプッシュします

POSTしたがって、requests_redirectableリストにプッシュすることを心配する必要はありません。

プログラムがURLをリダイレクトし、すべてのリダイレクトをログファイル(または何か)に記録していることを絶対に確認したい場合は、「s」と「s」を使用LWPsimple_requestHTTP::Responseリダイレクトis_redirectを検出できます。

use WWW::Mechanize; 

$mech = WWW::Mechanize->new();  
$mech->stack_depth(0);

my $resp = $mech->simple_request( HTTP::Request->new(GET => 'http://www.googl.com/') );
if( $resp->is_redirect ) {
  my $location = $resp->header( "Location" );
  my $uri = new URI( $location );
  print "Got redirected to URL - $uri\n";    
  $mech->get($uri);
  print $mech->content;
}

is_redirect301と302の両方の応答コードを検出します。

于 2012-08-22T18:05:53.897 に答える