Доступ к веб-сайту — WWW :: Механизировать

#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 спасибо, просто у меня где-то уже была похожая ситуация.