On 02 Oct 2002 15:23 GMT you wrote:

> 
> Hi!
> 
> We're developing a perl module for apache/mod_perl, but have encountered a
> really strange problem.
> 
> After 'a while' we seem to lose the data sent to the apache-server, at
> least it never reaches our module.

<SNIP>

> Recently we switched from using the standard Apache request-object to
> using the Apache::Request one, for the added functionality, but this has
> not had any effect at all as far as we can tell, and the bug keeps
> happening...

I ran into a problem that the param parts of a request were flushed when read for the 
first time... so if you lose them (don't store them) then you cannot access them again.

If you are not already, then try 

$apr = HTTP::Request->instance($r); instead...

Here is some code that I use to strip a request down and then store in a hashref for 
each request.  Almost every handler that I use calls this in the first instance.  This 
way $r will remain intact and $r_info is a really handy hashref.

sub handler {
        my $r_info = r_info($r);
}

sub r_info {
        my $r = shift;
        my $s = $r->server;
        my $c = $r->connection;
        my $apr = Apache::Request->instance($r);
        

        #Parse / Collect the parameters.
        my %params;
        foreach ($apr->param) {
                $params{$_} = $apr->param($_);
        }

        my $r_info_headers = [r_headers($r)]->[1];
        my $cookies = fetch CGI::Cookie;                

        my %hash;
        undef %hash;
        %hash = (

                server_name =>  $r->get_server_name(),
                server_port =>  $r->get_server_port(),
                doc_root =>             $r->document_root(),
                path_info =>    $r->path_info(),
                method =>               $r->method(),
                uri =>                  $r->uri(),
                params =>               \%params,
                protocol =>             $r->protocol(),
                server_admin => $s->server_admin(),
                server_hostname=>$s->server_hostname(),
                remote_ip =>    $c->remote_ip(),
                headers =>              $r_info_headers,
                cookies =>              $cookies
        );      
        return (\%hash);
}


sub r_headers {

        my $r = shift;
        my (@list, $header, @headers_list, $value, %headers_hash);

        @list = $r->headers_in;

        while ($header = shift @list) {
                $value = shift @list;
                push (@headers_list, $header);
                $headers_hash{$header} = $value;
        }

        return (\@headers_list, \%headers_hash);
}


Reply via email to