2009-05-21 98 views
11

我有一個Perl腳本,它使用WWW::Mechanize從文件讀取並在網站上執行一些自動化任務。但是,每次請求某個頁面後,該網站都會使用302重定向。我不想被重定向(它重定向的頁面需要很長時間才能響應);我只想遍歷文件並反覆調用第一個鏈接。我無法弄清楚如何使WWW :: Mechanize不遵循重定向。有什麼建議麼?如何讓WWW :: Mechanize避免重定向?

回答

5

WWW :: Mechanize是LWP :: UserAgent的子類;您可以像使用LWP :: UserAgent一樣在構造函數中設置max_redirect或requests_redirectable選項。

+0

我試着將max_redirect設置爲0,但它沒有影響它。 – rfusca 2009-05-22 02:55:29

+1

如果確實max_redirect不影響LWP和Mech是否不遵循重定向,那麼這是一個應該報告的錯誤。 – 2010-03-31 21:39:46

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) - 它顯然不遵循重定向。