perl - mod_perl headers_in 不工作

标签 perl apache mod-perl

我在 Red Hat 5.2 上将 mod_perl 2 与 Apache 2.2.3 一起使用,并且我正在尝试访问请求 header ,但是 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 的绑定(bind)接口(interface)具有相同的效果 - 即将 get('Accept') 行更改为:
my $accept = $headers->{Accept};

给出完全相同的日志输出。

根据上面的链接文档:

This table is available starting from the PerlHeaderParserHandler phase



所以我希望我的代码在 PerlResponseHandler 阶段运行,能够访问 header 。

有谁知道我做错了什么?

编辑: 使用 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 尝试进入 $headers 似乎也会导致执行停止。

编辑: 尝试设置其中一个 header 也失败了。
$logger->warn('reset accept');
$r->headers_in->{'Accept'}= 'everything';
$logger->warn('post set accept');

停止日志输出
WARN reset accept

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

最佳答案

apache日志中是否有任何内容?如果您的代码停止执行,似乎应该在某处出现错误,说明原因。

关于perl - mod_perl headers_in 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/718926/

相关文章:

php -/var/www 中的符号链接(symbolic link)权限被拒绝

apache - htaccess 使用 index.php 重定向到 https

perl - 如何使用带有 mod_perl 的调试器

java - 正则表达式 Java 端点注释

Perl:处理数组和数组引用

perl - 我应该使用继承还是组合?

perl - 我如何让 mod_perl 识别对我的应用程序的更改?

perl - perl 作为一种语言和 CGI​​ 脚本有什么区别?

apache - RewriteCond 和 rewriteRule 根据域进行重定向

perl - 如何使用 ModPerl::Registry 抑制旧 CGI 脚本中的默认 mod_perl 错误页面