2015-05-12 2 views
0

Я пытаюсь запустить ниже код для анализа содержимого HTML страницы для ниже URLНевозможно получить веб-контента с помощью LWP :: Simple, но в состоянии получить содержание от LWP :: UserAgent

#!/usr/bin/perl 
use LWP::Simple; 
use HTML::TreeBuilder; 
$response = get("http://www.viki.com/"); 
print $response; 

Nothing печатается. Это работает, если эмулируется из браузера.

+0

Уверен, что здесь есть какой-то вопрос, только что не понял, что это такое? – mttrb

+0

не удается получить содержимое страницы. Есть ли способ получить его без использования пользовательского агента. – Tirumalesh

ответ

2

Когда я пытаюсь получить доступ http://www.viki.com с помощью LWP::UserAgent я получаю следующий ответ:

<html><body><h1>403 Forbidden</h1> 
Request forbidden by administrative rules. 
</body></html> 

get подпрограммы в LWP::Simple реализуется следующим образом (по крайней мере, в версии 6.13).

sub get ($) 
{ 
    my $response = $ua->get(shift); 
    return $response->decoded_content if $response->is_success; 
    return undef; 
} 

Как вы можете видеть, метод get будет возвращать только содержимое, если ответ будет успешным, в противном случае он будет возвращать undef.

Ответ получен от LWP::UserAgent является ошибкой 403, другими словами, не удался. Поэтому LWP::Simple вернет undef по тому же самому URL-адресу.

Похоже, что веб-сайт (http://www.viki.com) проверяет строку агента пользователя и возвращает содержимое только «действительным» пользовательским агентам. LWP::Simple является жестко запрограммированным для использования LWP::Simple/$VERSION в качестве пользовательского агента.

Если вы действительно должны использовать LWP::Simple тогда вы могли бы заставить агент пользователя так:

use LWP::Simple qw/ get $ua /; 

$ua->agent('Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0'); 

print get('http://www.viki.com'); 

LWP::Simple выставляет экземпляр LWP::UserAgent, что он использует в качестве внутренне необязательно включен $ua переменных. По-прежнему необходимо настроить агент пользователя в этом экземпляре, чтобы загрузить эту конкретную страницу.

+0

Он работал для меня, если в моем скрипте упоминается пользовательский агент. '$ url = LWP :: UserAgent-> new; $ url-> таймаут (300); $ url-> agent ('Mozilla/5.0 (Windows NT 6.1; WOW64; rv: 37.0) Gecko/20100101 Firefox/37.0'); ' Я хочу знать, как мы можем это сделать, используя LWP :: Simple – Tirumalesh

+0

страница, которую вы запрашиваете, возвращает ошибку 403. LWP :: Simple только возвращает содержимое, если загрузка страницы успешна, код возврата от 200 до 299. – mttrb

+0

Я обновил ответ. – mttrb

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