2009-04-05 2 views
3

Я использую mod_perl 2 с Apache 2.2.3 в Red Hat 5.2, и я пытаюсь получить доступ к заголовкам запроса, но метод Apache2 :: RequestRec headers_in (вернее, его возвращаемое значение) не ведет себя так, как я ожидал.mod_perl 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 :: Таблица был один и тот же эффект - то есть изменение get('Accept') строку:

my $accept = $headers->{Accept}; 

дает точно такой же вывод журнала.

Согласно приведенной выше связанной документации:

Эта таблица доступна, начиная с PerlHeaderParserHandler фазы

Так что я бы ожидать, мой код, работающий в PerlResponseHandler фазе, чтобы иметь возможность доступа заголовки.

Есть ли у кого-нибудь идеи, что я делаю неправильно?

Редактировать: Использование данных :: Самосвал на самом деле не прояснил ситуацию.

Код:

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'), с тем же результатом.

+0

Что находится в объекте $ headers? Вы можете показать какой-то вывод Data :: Dumper? –

ответ

0

Проблема найдено:

мне нужно добавить

use APR::Table; 

где-то. Какой-то странный, что он с удовольствием смог создать объект APR :: Table.

1

Есть ли что-либо в журналах apache? Кажется, что если ваш код перестает выполняться, должна быть ошибка где-то говорить почему.

+0

Эти предупреждения входят в журнал ошибок - после записи журнала я ничего не записываю. – Cebjyre

0

Вы пробовали получать заголовок Accept без присвоения объекта заголовка до $ заголовка:

my $accept = $r->headers_in->get('Accept'); 

Это работает в моем коде работает в PerlResponseHandler фазе.

+0

Вот как я изначально пытался получить к нему доступ, я разложил его, чтобы было ясно, какая часть вызывает проблемы – Cebjyre

Смежные вопросы