perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Torsten Förtsch <torsten.foert...@gmx.net>
Subject Re: Adding args to a Request through InputFilter
Date Tue, 19 Jan 2010 20:59:55 GMT
On Tuesday 19 January 2010 17:11:03 Ivory wrote:
> I would like to add args to a request on the fly thanks to an InputFilter.
> 
> It seems like the $f->r->args($new_args) doesn't record the new argument
> inside the request.
> 
> For example :
> 
> Inside the filter :
> sub handler{
> 
>     my ($f, $bb, $mode, $block, $readbytes) = @_; # filter args # $mode,
> $block, $readbytes are passed only for input filters
> 
>     my $rv = $f->next->get_brigade($bb, $mode, $block, $readbytes);
>     return $rv unless $rv == APR::Const::SUCCESS;
>     
>     print STDOUT "Perlfilter : Uri = ", $f->r->uri(),"\n";      
>     print STDOUT $f->r->args(),"\n"; #No argument
>     $f->r->args("userId=10");
>     print STDOUT $f->r->args(),"\n"; #Returns the arg I passed
> }
> 
> In a running perl script on my apache the $r->args() doesn't return
> anything.
> 
> As I'm a newbie using mod_perl, a little help would be appreciated :)
> 
What do you want to achieve?

In general I'd not recommend to change $r->args in a filter because a filter 
is run when input is consumed and that is somewhat besides the normal program 
flow.

Normally apache consumes input only in the response phase. A handler like the 
default handler that has no use for input calls ap_discard_request_body() and 
thus reads the input calls all input filters and puts the result in the bin. A 
handler like mod_cgi processes the input but again, it consumes it only in the 
response phase. CGI environment variables are set earlier. So changing $r-
>args in a filter cannot affect them.

Instead use a PerlFixupHandler or so.

PerlFixupHandler "sub {$_[0]->args(q{userId=10});0;}"

Torsten

Mime
View raw message