Я использую mod_perl 2 с Apache 2.2.3 в Red Hat 5.2 и пытаюсь получить доступ к заголовкам запросов, но метод Apache2 :: RequestRec headers_in (точнее, его возврат) значение) не ведет себя так, как я ожидал.
Фрагмент кода:
$logger->warn('version ' . $mod_perl::VERSION);
$logger->warn('r ' . $r);
my $headers = $r->headers_in;
$logger->warn('headers ' . $headers);
my $accept = $headers->get('Accept');
$logger->warn('got $accept');
$logger->warn($accept);
дает следующий вывод журнала:
WARN version 2.000004
WARN r Apache2::RequestRec=SCALAR(0x2ae0598e9ef0)
WARN headers APR::Table=HASH(0x2ae06cad15a0)
с выполнением, которое, по-видимому, останавливается при попытке любого доступа к APR :: Table.
Связанный интерфейс для APR :: Table имел тот же эффект - то есть изменение строки get('Accept')
на:
my $accept = $headers->{Accept};
дает точно такой же вывод журнала.
Согласно вышеупомянутой связанной документации:
Эта таблица доступна, начиная с фазы PerlHeaderParserHandler
Поэтому я ожидаю, что мой код, работающий на этапе PerlResponseHandler, сможет получить доступ к заголовкам.
У кого-нибудь есть идеи, что я делаю не так?
Редактировать: Использование данных :: Dumper на самом деле не прояснил вопросы вообще.
Код:
use Data::Dumper;
$logger->warn(Dumper($r));
my $headers = $r->headers_in;
$logger->warn($headers);
$logger->warn(Dumper($headers));
$logger->warn('have dumped $headers');
Выход:
WARN $VAR1 = bless( do{\(my $o = '47143456365192')}, 'Apache2::RequestRec' );
WARN APR::Table=HASH(0x2ae071b06fd0)
Похоже, что попытка попасть в заголовки $ даже через Data :: Dumper приводит к остановке выполнения.
Редактировать: Попытка установить один из заголовков также не удалась.
$logger->warn('reset accept');
$r->headers_in->{'Accept'}= 'everything';
$logger->warn('post set accept');
останавливает вывод журнала в
WARN reset accept
точка. Я также попробовал альтернативу set(Accept => 'everything')
, с тем же результатом.