Как проверить значение заголовка HTTP, используя LWP::UserAgent

Я могу публиковать больше вопросов, когда получаю ответы, но здесь идет!

В настоящее время я пытаюсь устранить неполадки сценария Perl, который использовался моим университетом для автоматической загрузки файлов с данными оценки SAT.

Идея состоит в том, чтобы прочитать электронную почту в определенной учетной записи; вытащить номер цикла (который используется в URL); собрать воедино несколько URL; а затем использовать LWP::UserAgent чтобы захватить файлы с сервера и применить к ним другие магии Perl.

В своем исследовании я определил, что ввод URL-адреса вручную (и, следовательно, ограничение сценария, который должен запускать пользователь, с заменой номера цикла каждый раз) на самом деле работает.

Изучая объекты ответа, отправленные обратно, я заметил (прежде всего), что в запросе, который не выполнен, отсутствует следующая строка:

'_uri_canonical' => $VAR1->{'_request'}{'_uri'}

Однако он присутствует в запросе, который успешно выполняется.

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

Мой вопрос касается дальнейшего расследования, чтобы понять, почему его отвергают.

В документации для LWP::UserAgent Я заметил это:

Ответы об ошибках, которые LWP генерирует внутри, будут иметь заголовок "Client-Warning" со значением "Internal response". Если вам необходимо отличить эти внутренние ответы от ответов, которые на самом деле генерирует удаленный сервер, вам необходимо проверить это значение заголовка.

Мой вопрос: как вы на самом деле проверить это значение заголовка? (Прошу прощения за любое невежество; я стажер в отделе информационных технологий моего колледжа)

2 ответа

На самом деле в этот заголовок помещаются различные сообщения, которые вы можете получить следующим образом:

if (my $cw = $response->header('Client-Warning')) {
   die("Internal error: $cw\n");
}

Internal response Сообщение используется только тогда, когда статус уже указывает на ошибку. Другие сообщения, такие как Redirect loop detected а также Missing Authenticate header используются в другое время. Приведенный выше код получит любое сообщение, а не только проверку Internal response,

Стандартный способ использования LWP это что-то вроде

use strict;
use warnings;

use LWP;

my $ua = LWP::UserAgent->new;

my $resp = $ua->get('http://my.domain.co.uk/');

die $resp->status_line unless $resp->is_success;

my $content = $resp->decoded_content;

Что вы должны знать?

Другие вопросы по тегам