#html #perl
#HTML #perl
Вопрос:
Я пытаюсь использовать приведенный ниже код, чтобы получить исходный код htm веб-сайта, и это работает. Однако я не могу получить результат при посещении веб-сайта http://reserve.apple.com/WebObjects/ProductReservation.woa/wa/reserveProduct используя приведенный ниже код. Но я могу получить доступ к этой странице, правильно используя браузер. Не могли бы вы дать мне несколько советов по устранению этой проблемы? Спасибо.
#!/usr/bin/perl
use strict;
use warnings;
# create a new browser
use WWW::Mechanize;
my $browser = WWW::Mechanize->new();
# tell it to get the main page
my $sURL = 'http://www.apple.com';
#my $sURL = 'http://reserve.apple.com/WebObjects/ProductReservation.woa/wa/reserveProduct';
$browser->get($sURL);
print $browser->content;
exit(0);
Ответ №1:
Это странное поведение, но для URL-адреса сайта, который вы хотите получить, необходимо определить следующие заголовки: Accept, Accept-Encoding, Accept-Language, Accept-Charset, Cookie.
В противном случае сервер вообще не отвечает.
Вы можете легко сделать это, просто вставив следующий код перед вашим запросом «get»:
$browser->add_header(
"Accept" => "",
"Accept-Encoding" => "",
"Accept-Language" => "",
"Accept-Charset" => "",
"Cookie" => ""
);
Вместо пустых полей вы можете вставить некоторые реальные значения, но это тоже работает.
Комментарии:
1. yko — Потрясающе! На самом деле, я тоже об этом думаю. Но, не могли бы вы поделиться со мной, почему вы это знаете? Спасибо.
2. @TommyLiu это просто опыт. Я скопировал заголовки из запроса chrome и поместил их в запрос test mechanize. И как только это сработало, я начал удалять заголовки один за другим. Упс — он перестал работать, если я удалил какой-либо заголовок. Затем я удалял содержимое заголовков фрагмент за фрагментом в попытке найти важные данные. Я действительно был удивлен, когда обнаружил, что для этого не нужны никакие данные. Просто названия заголовков
3. Я смог сократить заголовки до
'Accept' => 'text/html', 'Accept-Language' => 'en', 'Cookie' => ''
.4. Хороший улов. Я изучил это немного ранее сегодня, но ничего не добился с обычными подозреваемыми.
5. @flesk спасибо, просто у меня где-то уже была похожая ситуация.