2009-05-21 10 views
11

WWW::Mechanizeを使用してファイルから読み込み、Webサイトでいくつかの自動化されたタスクを実行するPerlスクリプトがあります。ただし、特定のページをリクエストするたびに302リダイレクトが使用されます。私はリダイレクトしたくありません(リダイレクトするページの応答時間が長すぎます)。私はちょうどファイルをループし、最初のリンクを繰り返し呼び出す必要があります。私はWWW :: Mechanizeをリダイレクトに従わないようにする方法を理解できません。助言がありますか?次のリダイレクトからWWW :: Mechanizeを維持するにはどうすればよいですか?

答えて

10

WWW::MechanizeLWP::UserAgentのサブクラスです。だから、あなたはどんなLWP::UserAgentの方法も使うことができます。

my $mech = WWW::Mechanize->new(); 
$mech->requests_redirectable([]); 
5

WWW :: Mechanizeは、LWP :: UserAgentのサブクラスです。 LWP :: UserAgentと同じようにコンストラクタのmax_redirectオプションまたはrequests_redirectableオプションを設定できます。

+0

max_redirectを0に設定しようとしましたが、効果がありませんでした。 – rfusca

+1

もしmax_redirectがLWPとMechがリダイレクトに従わないかどうかに影響しないのであれば、それは報告すべきバグです。 –

4

あなたは、この例のように$剤 - > max_redirect(0);,使用することができます。

#!/usr/bin/perl -w 
use strict; 

use WWW::Mechanize; 

my $agent = WWW::Mechanize->new('autocheck' => 1, 'onerror' => undef,); 
$agent->max_redirect(0); 
$agent->get('http://www.depesz.com/test/redirect'); 
printf("Got HTTP/%s from %s.\n", $agent->response->code, $agent->uri); 

$agent->max_redirect(1); 
$agent->get('http://www.depesz.com/test/redirect'); 
printf("Got HTTP/%s from %s.\n", $agent->response->code, $agent->uri); 

それは印刷し実行している:だから

Got HTTP/302 from http://www.depesz.com/test/redirect. 
Got HTTP/200 from http://www.depesz.com/. 

を、max_redirect(0)と - それは明らかにリダイレクトに従っていません。

+0

奇妙なことに、max_redirectを0に変更しても動作しませんでした。(間接的な効果があるので、コード内のバグだと思われますが)、requests_redirectableを変更するとうまくいきました。 – rfusca

+1

別の注意点...私はあなたのdepesz.comウェブサイトを常に使用しています。 Postgresのための素晴らしいリソース。 – rfusca

関連する問題