troyd1
asked on
Perl cgi variables now returning on both post and get
I am running activeperl for cgi and just upgraded my server. My old perl version is 5.8.0, my new version is 5.8.8.820. In my perl script, I am collecting some variables sent my the browser and then writing them out to 2 files. I have not changed the script. My old script used to return the query string variables in the param() loop, but the new one does not sometimes. I suspect it is when the method is post it is doing this, but not sure.
Here is my script:
#!c:/perl/bin/perl.exe
##
{
use CGI qw/:standard/;
#
$bfile="c:\\TEMP\\UPLOAD\\ $$.env";
open (UPLOAD,">$bfile") || Error ();
print UPLOAD "QUERY_STRING=",$ENV{"QUER Y_STRING"} ,"\n";
print UPLOAD "HTTP_COOKIE=",$ENV{"HTTP_ COOKIE"}," \n";
print UPLOAD "SERVER_NAME=",$ENV{"SERVE R_NAME"}," \n";
print UPLOAD "PATH_INFO=",$ENV{"PATH_IN FO"};
close (UPLOAD);
$bfile="c:\\TEMP\\UPLOAD\\ $$.qry";
open (UPLOAD,">$bfile") || Error ();
foreach my $name (param()){
print UPLOAD "\n";
$value = param($name);
$value =~ s/\r/%FD/g;
$value =~ s/\n//g;
print UPLOAD $name,"=",$value;
}
close (UPLOAD);
chdir 'c:\LINK' or die 'Bad directory';
my $file = `udt LINK.GO $$ PREMIERE`;
$file =~ s/.*?(Content.*)$/$1/gsi;
print "$file\n";
}
I am far from a perl expert. This is what I threw together a while ago and has worked up until now. Any suggestions?
Also, my new server is running windows 2003 server enterprise edition, and my old server was running windows 2000 advanced server.
Thanks, Troy
Here is my script:
#!c:/perl/bin/perl.exe
##
{
use CGI qw/:standard/;
#
$bfile="c:\\TEMP\\UPLOAD\\
open (UPLOAD,">$bfile") || Error ();
print UPLOAD "QUERY_STRING=",$ENV{"QUER
print UPLOAD "HTTP_COOKIE=",$ENV{"HTTP_
print UPLOAD "SERVER_NAME=",$ENV{"SERVE
print UPLOAD "PATH_INFO=",$ENV{"PATH_IN
close (UPLOAD);
$bfile="c:\\TEMP\\UPLOAD\\
open (UPLOAD,">$bfile") || Error ();
foreach my $name (param()){
print UPLOAD "\n";
$value = param($name);
$value =~ s/\r/%FD/g;
$value =~ s/\n//g;
print UPLOAD $name,"=",$value;
}
close (UPLOAD);
chdir 'c:\LINK' or die 'Bad directory';
my $file = `udt LINK.GO $$ PREMIERE`;
$file =~ s/.*?(Content.*)$/$1/gsi;
print "$file\n";
}
I am far from a perl expert. This is what I threw together a while ago and has worked up until now. Any suggestions?
Also, my new server is running windows 2003 server enterprise edition, and my old server was running windows 2000 advanced server.
Thanks, Troy
if it is working somtimes, then you need to post the complete HTTP header and body of the request of an working and a none working example
ASKER
I think I am looking for a proper way to get both the post and get variables. There must have been some changes between the versions.
perls CGI is lame according GET vs. POST, hence there should not be a difference
ASKER
What do you mean by lame?
ASKER
After doing more research, it appears the query_string variables are only getting in the params on get and not post. I checked my variables from the old version and they are included in both.
would it matter whether $ENV{QUERY_STRING} is getting set if you are using
CGI.pm to read param() ?
What was $ENV{REQUEST_METHOD} and $ENV{CONTENT_LENGTH} ?
CGI.pm to read param() ?
What was $ENV{REQUEST_METHOD} and $ENV{CONTENT_LENGTH} ?
which version of CGI.pm are you using? It should not make a difference if the variables are send with GET or POST
ASKER
How do I tell?
ASKER
Here goes. I used cpan i CGI. It says CPAN_VERSION 3.28, INST_VERSION 3.20. I tried running package manager, but cannot see the CGI module. Is it part of a different one? it says 6647 modules , 43 listed 43 installed. If I show all mudules, CGI is there, but I do not think it is installed. It says it is version 2.91.
Please explain.
I added REQUEST_METHOD and ran some tests. Here are the variables of my 2 files, on for get and one for post:
The .env file for GET:
QUERY_STRING=PROGRAM=ECMAI N&PAGENAME =ORDERS
REQUEST_METHOD=GET
the .qry file for GET:
<BLANK LINE>
PROGRAM=ECMAIN
PAGENAME=ORDERS
The .env file for POST:
QUERY_STRING=PROGRAM=ECMAI N&PAGENAME =CUSTSERVI CE&SUBPAGE NAME=LOGIN
REQUEST_METHOD=POST
The .qry file for POST:
<blank line>
USERNAME=00005
PASSWORD=bh2005
SUBMIT=Submit
EMAIL=
Hope this helps.
Please explain.
I added REQUEST_METHOD and ran some tests. Here are the variables of my 2 files, on for get and one for post:
The .env file for GET:
QUERY_STRING=PROGRAM=ECMAI
REQUEST_METHOD=GET
the .qry file for GET:
<BLANK LINE>
PROGRAM=ECMAIN
PAGENAME=ORDERS
The .env file for POST:
QUERY_STRING=PROGRAM=ECMAI
REQUEST_METHOD=POST
The .qry file for POST:
<blank line>
USERNAME=00005
PASSWORD=bh2005
SUBMIT=Submit
EMAIL=
Hope this helps.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.