Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Mar 2003 00:21:59 +0100
From:      Olivier Dony <olivier@blacktrap.net>
To:        FreeBSD-questions <freebsd-questions@freebsd.org>
Subject:   POST data not available in cgi perl scripts
Message-ID:  <20030311232159.GA11475@vega.blacktrap.net>

next in thread | raw e-mail | index | archive | help
I understand this might be a little off topic but I can only reproduce the 
problem on one of my FreeBSD server, so it's not that much OT.

It's very simple, the data from a HTTP POST never reaches my CGI perl scripts.
There are no errors in the server log, the CGI executes fine, no debug with 
CGI::Carp, etc.. only thing is that the POST data is always empty. And that 
no matter what browser I use of course. Also I'm using CGI.pm, but handling 
it by hand yields the same results. The POST DATA is always empty.
Though if I run my script with 'perl -c' in interactive mode and POST
something it works ok and the script gets my POST DATA without problem.

Displaying the %ENV shows the correct QUERY_STRING when using GET, but with
POST the POST DATA never makes it to the script. 

This happens only on one of my FreeBSD : 4.7-RELEASE, apache 1.3.27, system 
perl v5.005_03, whereas the same CGI scripts run fine on my other 5.0-RELEASE
and 4.4-RELEASE, with the same apache version, and perl different or the same.

I have no idea where or what I could look to solve the problem. Maybe others
have had the same issue or any perl/cgi gurus have any ideas for me?

I will be glad to provide any additional info or config files.

TIA a lot for any hints

--
Olivier


PS: An example of a very basic test that fails, I POST into this CGI script,
and the output of the POST data is empty, though CONTENT_LENGTH is correct :

<FILE post.cgi>
#!/usr/bin/perl -w
print "Content-type:text/html\n\n";
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
print "DATA: [$buffer]<br>\n"; # <- nothing output between the brackets here
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
}
print "<html><body>";
foreach $key (keys(%FORM)) {
            print "$key = $FORM{$key}<br>";
}
#           ^^^^^^^^^^^ here my output is always empty too

foreach $key (sort(keys %ENV)) {
            print "$key = $ENV{$key}<br>\n";
}

print "</body></html>";
</FILE post.cgi>

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-questions" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030311232159.GA11475>