Почему я не могу получить страницы википедии с помощью LWP :: Simple?

Я пытаюсь получить страницы Википедии, используя LWP :: Simple , но они не возвращаются. Этот код:

#!/usr/bin/perl
use strict;
use LWP::Simple;

print get("http://en.wikipedia.org/wiki/Stack_overflow");

ничего не печатает. Но если я использую какую-то другую веб-страницу, скажем http://www.google.com, она работает нормально.

Есть ли какое-то другое имя, которое я должен использовать, чтобы ссылаться на страницы Википедии?

Что здесь может происходить?

23.08.2008 19:54:09
Обратите внимание, что вы получаете сообщение «403 Forbidden».
Bryce 13.08.2013 17:21:35
5 ОТВЕТОВ
РЕШЕНИЕ

Видимо Википедия блокирует LWP :: Простые запросы: http://www.perlmonks.org/?node_id=695886

Вместо этого работает следующее:

#!/usr/bin/perl
use strict;
use LWP::UserAgent;

my $url = "http://en.wikipedia.org/wiki/Stack_overflow";

my $ua = LWP::UserAgent->new();
my $res = $ua->get($url);

print $res->content;
18
23.08.2008 21:58:26
Я получаю сообщение об ошибке 500. Не удается подключиться к en.wikipedia.org:443 для данного URL-адреса вики, однако для домашней страницы stackoverflow stackoverflow.com выдает 403. Я добавил $ua->agent("WikiBot/0.1");до вызова getметода, это работало здорово для многих сайтов в том числе stackoverflow. Но все равно выдает ошибку на вики-странице, ту же ошибку, что упоминалась выше.
Kamal Nayan 18.04.2016 07:12:40
Добавлена $ua = LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); ошибка 500. Не удается подключиться к en.wikipedia.org:443 . Это может помочь кому-то еще.
Kamal Nayan 18.04.2016 08:08:29

Потому что Википедия блокирует строку агента пользователя HTTP, используемую LWP :: Simple.

Вы получите ответ «403 Forbidden», если попытаетесь его использовать.

Попробуйте обойти это с помощью модуля LWP :: UserAgent, установив атрибут агента.

5
23.08.2008 20:48:56

Также посмотрите связанные с Mediawiki модули CPAN - они предназначены для попадания на сайты Mediawiki (одним из которых является wikipedia) и могут дать вам больше наворотов, чем простой LWP.

http://cpan.uwinnipeg.ca/search?query=Mediawiki&mode=dist

5
16.09.2008 14:23:25

Вы также можете просто установить UA в модуле LWP :: Simple - просто импортируйте переменную $ ua, и это позволит вам изменить базовый UserAgent:

use LWP::Simple qw/get $ua/;
$ua->agent("WikiBot/0.1");
print get("http://en.wikipedia.org/wiki/Stack_overflow");
12
16.09.2008 14:44:30

Я решил эту проблему, используя LWP:RobotUAвместо LWP::UserAgent. Вы можете прочитать документ ниже. Существует не так много различий, которые вы должны изменить.

http://lwp.interglacial.com/ch12_02.htm

6
2.11.2012 09:43:05