2014-09-28 2 views
1

Я хочу напечатать перенаправленный url в perl.Perl распечатать перенаправленный url

ввода URL: http://pricecheckindia.com/go/store/snapdeal/52517?ref=velusliv

выход URL: http://www.snapdeal.com/product/vox-2-in-1-camcorder/1154987704?utm_source=aff_prog&utm_campaign=afts&offer_id=17&aff_id=1298&source=pricecheckindia

use LWP::UserAgent qw(); 
use CGI qw(:all); 
print header(); 
my ($url) = "http://pricecheckindia.com/go/store/snapdeal/52517?ref=velusliv"; 
my $ua = LWP::UserAgent->new; 
my $req = new HTTP::Request(GET => $url); 
my $res = $ua->request($req); 
print $res->request; 

Как получить это сделать в Perl?

+0

Можете ли вы сказать мне, что вы хотите получить точно. Ожидаемый результат? – Praveen

ответ

2

Чтобы найти URL-адрес, вам необходимо изучить HTTP response. Документация HTTP::Response дает полную информацию о том, как это сделать, но в итоге, вы должны сделать следующее:

use strict; 
use warnings; 
use feature ':5.10'; # enables "say" 
use LWP::UserAgent; 
my $url = "http://pricecheckindia.com/go/store/snapdeal/52517?ref=velusliv"; 

my $ua = LWP::UserAgent->new; 
my $req = new HTTP::Request(GET => $url); 
my $res = $ua->request($req); 

# you should add a check to ensure the response was actually successful: 
if (! $res->is_success) { 
    say "GET failed! " . $res->status_line; 
} 

# show the base URI for the response: 
say "Base URI: " . $res->base; 

Вы можете просмотреть переадресации с использованием HTTP::Response «s redirects метода:

if ($res->redirects) { # are there any redirects? 
    my @redirects = $res->redirects; 
    say join(", ", @redirects); 
} 
else { 
    say "No redirects."; 
} 

В этом case, базовый URI совпадает с $url, и если вы изучите содержимое страницы, вы можете понять, почему.

# print out the contents of the response: 
say $res->decoded_contents; 

справа в нижней части страницы, есть следующий код:

$(window).load(function() { 
     window.setTimeout(function() { 
      window.location = "http://www.snapdeal.com/product/vox-2-in-1-camcorder/1154987704?utm_source=aff_prog&utm_campaign=afts&offer_id=17&aff_id=1298&source=pricecheckindia" 
     }, 300); 
    }); 

Перенаправление обрабатывается JavaScript, и поэтому не подобран LWP :: UserAgent. Если вы хотите получить этот URL-адрес, вам нужно извлечь его из содержимого ответа (или использовать другой клиент, поддерживающий javascript).

На другой ноте, ваш сценарий начинается так:

use LWP::UserAgent qw(); 

Код после имени модуля, qw(), используется для импорта конкретных подпрограмм в сценарий, так что вы можете использовать их по имени (вместо того, чтобы ссылаться на имя модуля и имя подпрограммы). Если qw() пуст, он ничего не делает, поэтому вы можете просто опустить его.

0

Он выдает вам сообщение об ошибке для последней строки $ res -> request, так как он возвращает хэш и содержимое из ответа. Так ниже код:

use LWP::UserAgent qw(); 
use CGI qw(:all); 
print header(); 
my ($url) = "http://pricecheckindia.com/go/store/snapdeal/52517?ref=velusliv"; 
my $ua = LWP::UserAgent->new; 
my $req = new HTTP::Request(GET => $url); 
my $res = $ua->request($req); 
print $res->content; 
1

LWP::UserAgent Чтобы следовать переадресации, просто установите опцию max_redirects:

use strict; 
use warnings; 

use LWP::UserAgent qw(); 

my $url = "http://pricecheckindia.com/go/store/snapdeal/52517?ref=velusliv"; 

my $ua = LWP::UserAgent->new(max_redirect => 5); 

my $res = $ua->get($url); 

if ($res->is_success) { 
    print $res->decoded_content; # or whatever 
} else { 
    die $res->status_line; 
} 

Однако, что веб-сайт использует JavaScript перенаправления.

$(window).load(function() { 
     window.setTimeout(function() { 
      window.location = "http://www.snapdeal.com/product/vox-2-in-1-camcorder/1154987704?utm_source=aff_prog&utm_campaign=afts&offer_id=17&aff_id=1298&source=pricecheckindia" 
     }, 300); 
    }); 

Это не будет работать, если вы не используете рамки, которые позволяют JavaScript, как WWW::Mechanize::Firefox.

Смежные вопросы