perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Wes Cravens <...@cortex-it.com>
Subject Re: [BUG] Losing GET/POST-data
Date Wed, 02 Oct 2002 15:51:37 GMT
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);
}



Mime
View raw message