如何使用mod_perl的過濾器/處理程序修改發佈請求內容?如何使用mod_perl修改發佈請求內容
我可以讀取PerlResponseHandler中的請求內容,但是如何將修改後的內容「附加」回請求中?
此外,我不想在PerlResponseHandler中執行此操作,因爲我想要請求的資源來處理響應生成部分。
任何幫助將不勝感激。
感謝。
如何使用mod_perl的過濾器/處理程序修改發佈請求內容?如何使用mod_perl修改發佈請求內容
我可以讀取PerlResponseHandler中的請求內容,但是如何將修改後的內容「附加」回請求中?
此外,我不想在PerlResponseHandler中執行此操作,因爲我想要請求的資源來處理響應生成部分。
任何幫助將不勝感激。
感謝。
如果添加use Apache2::RequestIO
和my ($r) = @_;
你可以做一個$r->print();
一個PerlResponseHandler
不能修改請求數據,但即使它可能會是什麼點。只有PerlInputFilterHandler
可以做到這一點,因爲它在獲得響應之前過濾輸入。
響應處理程序之後唯一的事情是輸出過濾器,日誌處理程序和清理處理程序。
package MyFilter; use strict; use base qw(Apache::Filter); use Apache2::Const qw(OK); sub handler: FilterRequestHandler { my ($f) = @_; while($f->read(my $buf, 1024)) { # do something with $buf $f->print($buf); } return OK; } 1;
重要的是要知道,你會得到大塊的數據。當您閱讀時,您可能會或可能不會在一次通話中發佈整個內容。
此代碼也可以運行 -
package MyApache2::Test7;
use strict;
use warnings;
use base qw(Apache2::Filter);
use Apache2::Connection();
use APR::Brigade();
use APR::Bucket();
use Apache2::Const -compile => 'OK';
use APR::Const -compile => ':common';
use Apache2::Log();
sub handler : FilterRequestHandler {
Apache2::ServerRec->log_error("f*** starts");
my ($f, $bb, $mode, $block, $readbytes) = @_;
my $c = $f->c;
my $bb_ctx = APR::Brigade->new($c->pool, $c->bucket_alloc);
my $rv = $f->next->get_brigade($bb_ctx, $mode, $block, $readbytes);
return $rv unless $rv == APR::Const::SUCCESS;
while (!$bb_ctx->is_empty) {
my $b = $bb_ctx->first;
if ($b->is_eos) {
$bb->insert_tail($b);
last;
}
my $len = $b->read(my $data);
Apache2::ServerRec->log_error($len);
#$b = APR::Bucket->new($bb->bucket_alloc, lc $data) if $len;
#$b->remove;
#$bb->insert_tail($b);
Apache2::ServerRec->log_error($data);
Apache2::ServerRec->log_error("f*** ends");
$bb_ctx->cleanup;
}
return Apache2::Const::OK;
}
1;
http://stackoverflow.com/questions/3083367/modify-post-request-in-mod-perl2 – daxim 2010-11-27 20:36:31
感謝Daxim。要訪問請求腳本,我需要下載CPAN的libapreq2-2.12庫。我會試一試。 – 2010-11-29 04:53:56
但是我認爲標準庫中必須有一些方法來讀取POST數據。謝謝。 – 2010-11-29 04:55:02