2012-06-06 12 views
8

रीडायरेक्ट प्राप्त करता है इसलिए मैं साइटों को क्रॉल करने के लिए WWW::Mechanize का उपयोग कर रहा हूं। यह बहुत अच्छा काम करता है, को छोड़कर अगर मैं इस तरह के रूप में एक यूआरएल का अनुरोध:पर्ल डब्ल्यूडब्ल्यूडब्लू :: मैकेनाइजेशन (या एलडब्लूपी) यूआरएल

http://www.levi.com/ 

मैं पर पुनः निर्देशित कर रहा हूँ:

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

और मेरी स्क्रिप्ट के लिए मुझे पता है कि यह रीडायरेक्ट जगह ले ली की जरूरत है और क्या यूआरएल मैं को रीडायरेक्ट किया गया था। क्या WWW::Mechanize या LWP के साथ इसका पता लगाने के लिए वैसे भी है और फिर रीडायरेक्ट यूआरएल प्राप्त करें? धन्यवाद!

उत्तर

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())); 
    } 
} 

तो स्थिति कोड 3xx है, तो आप प्रतिक्रिया हेडर पुनर्निर्देशन यूआरएल के लिए जाँच करनी चाहिए।

+1

वाह! महान। बहुत बहुत धन्यवाद :) – srchulo

+0

अगर मैं रीडायरेक्ट को फिर से अनुमति देना चाहता था, या रीडायरेक्ट गिनती रीसेट करना चाहता हूं, तो क्या ऐसा कोई तरीका है जिससे मैं कर सकता हूं? या उदाहरण के लिए, क्या मैं अपने अंतिम स्थान पर रीडायरेक्ट की एक स्ट्रिंग का पालन कर सकता हूं और अभी भी पता है कि स्थिति 300 से 400 के बीच थी? मैंने max_redirect (0) से छुटकारा पा लिया, लेकिन फिर मुझे 500 की स्थिति मिली और मुझे पता है कि यह सही नहीं है ... – srchulo

+0

यदि कोई इसे संदर्भ के लिए देखता है, तो बस $ mech में एक नया WWW :: मैकेनाइज ऑब्जेक्ट संग्रहीत करता है छल। – srchulo

संबंधित मुद्दे