On Wed 17 Sep 2008, grsvarma019 wrote:
> If the requested script of an application needs POST data, that data
> is not being sent to the requested script ,but instead it is being
> captured by apache request object of the mod_perl.
>
> How can i pass this data to the requested script?
First, see if libapreq2 can help!
If it doesn't you can try to implement a request input filter that
caches the data on disk while mod_perl does $r->read or
$r->discard_request_body and a second one that reinserts that input for
the script. Not sure if that works.
The first part looks similar to that:
use Apache2::Const -compile=>qw/M_POST OK/;
use APR::Const -compile=>qw/SUCCESS/;
use Apache2::Filter ();
use APR::Bucket ();
use APR::Brigade ();
if( $r->method_number==Apache2::Const::M_POST ) {
my @content;
my $cl=0;
my $rc=$r->add_input_filter( sub {
my ($f, $bb, $mode, $block, $readbytes) = @_;
my $rv = $f->next->get_brigade($bb, $mode, $block, $readbytes);
return $rv unless $rv == APR::Const::SUCCESS;
for (my $b = $bb->first; $b; $b = $bb->next($b)) {
$b->read(my $bdata);
$cl+=length $bdata;
push @content, $bdata;
}
return Apache2::Const::OK;
} );
$r->discard_request_body;
$r->pnotes->[EMAIL PROTECTED];
$r->pnotes->{rbody_length}=$cl;
}
Well, it saves the request as pnotes but it shows the principle. The
second part is a bit trickier if not impossible. You'll have to modify
the input filter chain again, insert a filter that creates buckets from
the saved data. But I don't know if that works once EOF has been seen
on input.
Torsten
--
Need professional mod_perl support?
Just hire me: [EMAIL PROTECTED]