Re: Adding args to a Request through InputFilter

Torsten Förtsch <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.