簡體   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