繁体   English   中英

mod_perl headers_in不起作用

[英]mod_perl headers_in not working

我在Red Hat 5.2上使用mod_perl 2和Apache 2.2.3,我正在尝试访问请求头,但是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阶段运行,能够访问头文件。

有没有人有任何想法我做错了什么?

编辑:使用Data :: 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尝试进入$ header也会导致执行暂停。

编辑:尝试设置其中一个标题也失败。

$logger->warn('reset accept');
$r->headers_in->{'Accept'}= 'everything';
$logger->warn('post set accept');

停止日志输出

WARN reset accept

点。 我也尝试了set(Accept => 'everything')替代方案,结果相同。

apache日志中有什么内容吗? 看来如果你的代码停止执行,那么应该有一个错误说明原因。

您是否尝试获取Accept标头而未将标头对象分配给$ header:

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

这适用于我在PerlResponseHandler阶段运行的代码。

发现问题:

我需要补充一下

use APR::Table;

某处。 有点奇怪,它很高兴能够创建一个APR :: Table对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM