2009-04-05 12 views
3

私はRed Hat 5.2でApache 2.2.3でmod_perl 2を使用していますが、要求ヘッダーにアクセスしようとしていますが、Apache2 :: RequestRec headers_inメソッド(またはその戻り値)私が期待するように行動していない。mod_perl headers_in not working

コードフラグメント:4月::表へのアクセスとすぐに停止するように表示されて実行に

WARN version 2.000004 
WARN r Apache2::RequestRec=SCALAR(0x2ae0598e9ef0) 
WARN headers APR::Table=HASH(0x2ae06cad15a0) 

が試みられている。

$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); 

は、次のログ出力を提供します。

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

が正確に同じログ出力を与える:すなわちにget('Accept')ラインを変更 - 4月::テーブルの 縛らインタフェースが同じ効果を有していました。

上記のリンクのドキュメントによると:

この表は、だから私はアクセスできるように、PerlResponseHandler段階で実行されている、私のコードを期待するPerlHeaderParserHandler相

から始まる提供されていますヘッダー。

誰かが私が間違っているアイデアはありますか?

編集:データの使用:: 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) 

だから、でも、実行停止中のデータ:: Dumperの結果を通じて$ヘッダに取得しようとしているようです。

編集:ヘッダーの1つを設定しようとしても失敗します。

$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ログには何かがありますか?なぜあなたのコードが実行を停止すると、どこかの理由でエラーが発生するはずです。

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

これはPerlResponseHandlerフェーズで実行されている私のコードで動作します。

+0

これらの警告はエラーログに送られます。記録したログ出力の後には何もありません。 – Cebjyre

0

を使用すると、$ヘッダにヘッダオブジェクトを割り当てずにAcceptヘッダーを取得しようとしています。見つかっ

+0

これは私が最初にアクセスしようとしていた方法でしたが、どの部分が問題を引き起こしているかを明確にするために分割しました – Cebjyre