You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@perl.apache.org by Nick Tonkin <ni...@tonkinresolutions.com> on 2003/02/28 22:16:13 UTC

[mp2] PerlPostReadRequestHandler and invalid URI

Hi,

I have a handler I call as a PerlPostReadRequestHandler

sub handler {

    my $r = shift;
    my $uri = APR::URI->parse($r->pool, $r->construct_url);

    $uri->scheme('http');
    $uri->port('8080');

    $r->uri($uri->unparse());

    return Apache::DECLINED;
}
1;


This consistently leads to an error in the error log:

Invalid URI in request GET /foo/bar.html

Even though the request looks good in the access log:

400 GET http://www.ladyraquel.com:8080/charters/index.html


Have I missed soemthing obvious as usual?

Thanks,

- nick

PS Stas: I tried for >2hrs to make a test work in the Test framework ...
it indeed dies with the same error but I wasn't confident that it was
getting called as an init handler as I wanted ... I couldn't decipher :)


- nick

-- 

~~~~~~~~~~~~~~~~~~~~
Nick Tonkin   {|8^)>


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: [mp2] PerlPostReadRequestHandler and invalid URI

Posted by Stas Bekman <st...@stason.org>.
Nick Tonkin wrote:
> Hi,
> 
> I have a handler I call as a PerlPostReadRequestHandler
> 
> sub handler {
> 
>     my $r = shift;
>     my $uri = APR::URI->parse($r->pool, $r->construct_url);
> 
>     $uri->scheme('http');
>     $uri->port('8080');
> 
>     $r->uri($uri->unparse());
> 
>     return Apache::DECLINED;
> }
> 1;
> 
> 
> This consistently leads to an error in the error log:
> 
> Invalid URI in request GET /foo/bar.html
> 
> Even though the request looks good in the access log:
> 
> 400 GET http://www.ladyraquel.com:8080/charters/index.html
> 
> 
> Have I missed soemthing obvious as usual?

Yup, it's not supposed to work. It fails the same way with Apache 1.3. It's 
Apache that asserts, not mod_perl. It expects the $r->uri to start from / at 
this phase, after the mapping phase is completed you can change it any way you 
want.

Here is quick test I've run over mp1:

<Perl>
package Foo2;
use Apache::URI;
use Apache::Constants;
sub handler {
     my $r = shift;
     $r->uri(Apache::URI->parse($r->uri)->unparse);
     warn "uri ", $r->uri, "\n";
     return Apache::Constants::DECLINED;
}
package main;
</Perl>
PerlPostReadRequestHandler Foo2::handler

uri http://localhost:8000/perl/test.pl
[Sun Mar  2 17:22:03 2003] [error] [client 127.0.0.1] Invalid URI in request 
GET /perl/test.pl HTTP/1.0


> PS Stas: I tried for >2hrs to make a test work in the Test framework ...
> it indeed dies with the same error but I wasn't confident that it was
> getting called as an init handler as I wanted ... I couldn't decipher :)

you should have looked at the relevant config section in t/conf/httpd.conf 
(after running t/TEST -conf). I suppose you have added, something like:

__END__
PerlPostReadRequestHandler TestAPI::uri::postreadrequest_handler

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@stason.org http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org