如何使用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