Как проверить значение заголовка 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;
Что вы должны знать?