2012-06-06 3 views
8

그래서 WWW::Mechanize을 사용하여 사이트를 크롤링합니다. 내가 같은 URL을 요청하는 경우를 제외하고는, 좋은 작품 :Perl WWW :: Mechanize (또는 LWP)가 리디렉션 URL을 가져옵니다.

http://www.levi.com/ 

나는 리디렉션 오전 :

http://us.levi.com/home/index.jsp 

그리고 내 스크립트 나는이 리디렉션이 발생했습니다 것을 알 필요가 무엇의 URL I 은 (으)로 리디렉션되었습니다. 어쨌든 WWW::Mechanize 또는 LWP으로이를 감지 한 다음 리디렉션 된 URL을 가져 오나요? 감사! 상태 코드는 3XX 인 경우

답변

9
use strict; 
use warnings; 
use URI; 
use WWW::Mechanize; 

my $url = 'http://...'; 
my $mech = WWW::Mechanize->new(autocheck => 0); 
$mech->max_redirect(0); 
$mech->get($url); 

my $status = $mech->status(); 
if (($status >= 300) && ($status < 400)) { 
    my $location = $mech->response()->header('Location'); 
    if (defined $location) { 
    print "Redirected to $location\n"; 
    $mech->get(URI->new_abs($location, $mech->base())); 
    } 
} 

, 당신은 리디렉션 URL에 대한 응답 헤더를 확인해야합니다.

+1

와우! 큰. 고마워요 :) – srchulo

+0

리디렉션을 다시 허용하고 싶거나 리디렉션 수를 재설정하려는 경우 어떻게 할 수 있습니까? 또는 예를 들어 최종 위치로의 일련의 리디렉션을 따라 가면서 상태가 300에서 400 사이인지 알 수 있습니까? 나는 max_redirect (0)을 없애 버렸지 만, 나는 단지 500의 상태를 얻었고 나는 그것이 맞지 않다는 것을 안다. ... – srchulo

+0

만약 누군가가 이것을 참조한다면, 새로운 WWW를 저장한다 : $ mech에 Mechanize 객체는 장난. – srchulo