Perl scripts on Apache not retrieving POST data
I'm trying to get a pre-existing PERL web application running on my local MAMP apache2 server and am having problems getting post data. The app uses cgi.pm to try to grab data from $cgi->param
, but param is always empty even when properly formatted post data is sent in x-www-form-urlencoded
format.
Additionally, STDIN
is always empty and throws an error if not prefaced with *.
hello-world-form.cgi:
#!/[localpath]/perl5/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
print "Content-type: text/htmlnn";
print qq(
<!doctype html>
<html>
<body>
<form action="hello-world.cgi" method="POST">
<input type="text" name="myparam" />
<input type="submit" value="submit post var" />
</form>
</body>
</html>
);
hello-world.cgi:
#!/[localpath]/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
use CGI;
my $q = CGI->new();
print "Content-type: text/htmlnn";
print "<p>key = " . $q->param('myparam') . "</p>n"; #this is always empty
my @names = $q->param;
foreach my $name (@names) {
print "<p>$name = " . $q->param($name) . "</p>"; #this never runs
}
my $postdata = '';
my $in = *STDIN;
my $bytes = read($in, $postdata, $ENV{'CONTENT_LENGTH'});
print "<p>postdata = $postdata</p>n"; # postdata is empty
print "<p>content length = " . $ENV{'CONTENT_LENGTH'} . "</p>n"; # this number seems correct
foreach my $key (keys %ENV) {
print "<p>$key --> $ENV{$key}</p>n"; # nothing special here
}
httpd.conf:
...
LoadModule cgi_module modules/mod_cgi.so
LoadModule perl_module modules/mod_perl.so
...
ScriptAlias /cgi-bin/ "/[siteroot]/cgi-bin/"
Alias /perl/ "/Applications/MAMP/cgi-bin/"
<IfModule perl_module>
PerlModule ModPerl::Registry
<Location /perl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
</Location>
</IfModule>
I'm running PERL v5.24.0 via perlbrew with these modules:
> perlbrew list-modules
CGI
Date::Parse
Encode::Locale
HTML::Parser
HTML::Tagset
HTTP::Date
HTTP::Message
IO::HTML
LWP::MediaTypes
Perl
Sub::Uplevel
Test::Deep
Test::Needs
Test::NoWarnings
Test::Warn
Try::Tiny
URI
Any ideas?
apache perl cgi.pm
add a comment |
I'm trying to get a pre-existing PERL web application running on my local MAMP apache2 server and am having problems getting post data. The app uses cgi.pm to try to grab data from $cgi->param
, but param is always empty even when properly formatted post data is sent in x-www-form-urlencoded
format.
Additionally, STDIN
is always empty and throws an error if not prefaced with *.
hello-world-form.cgi:
#!/[localpath]/perl5/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
print "Content-type: text/htmlnn";
print qq(
<!doctype html>
<html>
<body>
<form action="hello-world.cgi" method="POST">
<input type="text" name="myparam" />
<input type="submit" value="submit post var" />
</form>
</body>
</html>
);
hello-world.cgi:
#!/[localpath]/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
use CGI;
my $q = CGI->new();
print "Content-type: text/htmlnn";
print "<p>key = " . $q->param('myparam') . "</p>n"; #this is always empty
my @names = $q->param;
foreach my $name (@names) {
print "<p>$name = " . $q->param($name) . "</p>"; #this never runs
}
my $postdata = '';
my $in = *STDIN;
my $bytes = read($in, $postdata, $ENV{'CONTENT_LENGTH'});
print "<p>postdata = $postdata</p>n"; # postdata is empty
print "<p>content length = " . $ENV{'CONTENT_LENGTH'} . "</p>n"; # this number seems correct
foreach my $key (keys %ENV) {
print "<p>$key --> $ENV{$key}</p>n"; # nothing special here
}
httpd.conf:
...
LoadModule cgi_module modules/mod_cgi.so
LoadModule perl_module modules/mod_perl.so
...
ScriptAlias /cgi-bin/ "/[siteroot]/cgi-bin/"
Alias /perl/ "/Applications/MAMP/cgi-bin/"
<IfModule perl_module>
PerlModule ModPerl::Registry
<Location /perl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
</Location>
</IfModule>
I'm running PERL v5.24.0 via perlbrew with these modules:
> perlbrew list-modules
CGI
Date::Parse
Encode::Locale
HTML::Parser
HTML::Tagset
HTTP::Date
HTTP::Message
IO::HTML
LWP::MediaTypes
Perl
Sub::Uplevel
Test::Deep
Test::Needs
Test::NoWarnings
Test::Warn
Try::Tiny
URI
Any ideas?
apache perl cgi.pm
1
Please show us also how you send the POST request to your Perl program.
– Corion
18 hours ago
4
Also, why do you have-d
on the hashbang line of the script?
– Corion
18 hours ago
3
(also, there is no data available on*STDIN
becauseCGI
will already have read all available data there. So, please post a Minimal, Complete, and Verifiable example so we can replicate this. This includes the HTML you're using to submit the POST request.
– Corion
18 hours ago
If you already have access to the POSTed request, I suggest adding it as well, including headers and body etc. I doesn't hurt if people can check actually sent values on their own.
– Thorsten Schöning
9 hours ago
Brilliant! The-d
was the issue here and I'll mark that as the answer. I added the form submit code for posterity (I was using postman to test so I didn't have a sample form file before). And thanks for the explanation on the STDIN. Unfortunately, the actual Perl app now breaks without the-d
, but at least I have a new problem to solve. :)
– curiousgage
9 hours ago
add a comment |
I'm trying to get a pre-existing PERL web application running on my local MAMP apache2 server and am having problems getting post data. The app uses cgi.pm to try to grab data from $cgi->param
, but param is always empty even when properly formatted post data is sent in x-www-form-urlencoded
format.
Additionally, STDIN
is always empty and throws an error if not prefaced with *.
hello-world-form.cgi:
#!/[localpath]/perl5/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
print "Content-type: text/htmlnn";
print qq(
<!doctype html>
<html>
<body>
<form action="hello-world.cgi" method="POST">
<input type="text" name="myparam" />
<input type="submit" value="submit post var" />
</form>
</body>
</html>
);
hello-world.cgi:
#!/[localpath]/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
use CGI;
my $q = CGI->new();
print "Content-type: text/htmlnn";
print "<p>key = " . $q->param('myparam') . "</p>n"; #this is always empty
my @names = $q->param;
foreach my $name (@names) {
print "<p>$name = " . $q->param($name) . "</p>"; #this never runs
}
my $postdata = '';
my $in = *STDIN;
my $bytes = read($in, $postdata, $ENV{'CONTENT_LENGTH'});
print "<p>postdata = $postdata</p>n"; # postdata is empty
print "<p>content length = " . $ENV{'CONTENT_LENGTH'} . "</p>n"; # this number seems correct
foreach my $key (keys %ENV) {
print "<p>$key --> $ENV{$key}</p>n"; # nothing special here
}
httpd.conf:
...
LoadModule cgi_module modules/mod_cgi.so
LoadModule perl_module modules/mod_perl.so
...
ScriptAlias /cgi-bin/ "/[siteroot]/cgi-bin/"
Alias /perl/ "/Applications/MAMP/cgi-bin/"
<IfModule perl_module>
PerlModule ModPerl::Registry
<Location /perl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
</Location>
</IfModule>
I'm running PERL v5.24.0 via perlbrew with these modules:
> perlbrew list-modules
CGI
Date::Parse
Encode::Locale
HTML::Parser
HTML::Tagset
HTTP::Date
HTTP::Message
IO::HTML
LWP::MediaTypes
Perl
Sub::Uplevel
Test::Deep
Test::Needs
Test::NoWarnings
Test::Warn
Try::Tiny
URI
Any ideas?
apache perl cgi.pm
I'm trying to get a pre-existing PERL web application running on my local MAMP apache2 server and am having problems getting post data. The app uses cgi.pm to try to grab data from $cgi->param
, but param is always empty even when properly formatted post data is sent in x-www-form-urlencoded
format.
Additionally, STDIN
is always empty and throws an error if not prefaced with *.
hello-world-form.cgi:
#!/[localpath]/perl5/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
print "Content-type: text/htmlnn";
print qq(
<!doctype html>
<html>
<body>
<form action="hello-world.cgi" method="POST">
<input type="text" name="myparam" />
<input type="submit" value="submit post var" />
</form>
</body>
</html>
);
hello-world.cgi:
#!/[localpath]/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
use CGI;
my $q = CGI->new();
print "Content-type: text/htmlnn";
print "<p>key = " . $q->param('myparam') . "</p>n"; #this is always empty
my @names = $q->param;
foreach my $name (@names) {
print "<p>$name = " . $q->param($name) . "</p>"; #this never runs
}
my $postdata = '';
my $in = *STDIN;
my $bytes = read($in, $postdata, $ENV{'CONTENT_LENGTH'});
print "<p>postdata = $postdata</p>n"; # postdata is empty
print "<p>content length = " . $ENV{'CONTENT_LENGTH'} . "</p>n"; # this number seems correct
foreach my $key (keys %ENV) {
print "<p>$key --> $ENV{$key}</p>n"; # nothing special here
}
httpd.conf:
...
LoadModule cgi_module modules/mod_cgi.so
LoadModule perl_module modules/mod_perl.so
...
ScriptAlias /cgi-bin/ "/[siteroot]/cgi-bin/"
Alias /perl/ "/Applications/MAMP/cgi-bin/"
<IfModule perl_module>
PerlModule ModPerl::Registry
<Location /perl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
</Location>
</IfModule>
I'm running PERL v5.24.0 via perlbrew with these modules:
> perlbrew list-modules
CGI
Date::Parse
Encode::Locale
HTML::Parser
HTML::Tagset
HTTP::Date
HTTP::Message
IO::HTML
LWP::MediaTypes
Perl
Sub::Uplevel
Test::Deep
Test::Needs
Test::NoWarnings
Test::Warn
Try::Tiny
URI
Any ideas?
apache perl cgi.pm
apache perl cgi.pm
edited 9 hours ago
curiousgage
asked 18 hours ago
curiousgagecuriousgage
267
267
1
Please show us also how you send the POST request to your Perl program.
– Corion
18 hours ago
4
Also, why do you have-d
on the hashbang line of the script?
– Corion
18 hours ago
3
(also, there is no data available on*STDIN
becauseCGI
will already have read all available data there. So, please post a Minimal, Complete, and Verifiable example so we can replicate this. This includes the HTML you're using to submit the POST request.
– Corion
18 hours ago
If you already have access to the POSTed request, I suggest adding it as well, including headers and body etc. I doesn't hurt if people can check actually sent values on their own.
– Thorsten Schöning
9 hours ago
Brilliant! The-d
was the issue here and I'll mark that as the answer. I added the form submit code for posterity (I was using postman to test so I didn't have a sample form file before). And thanks for the explanation on the STDIN. Unfortunately, the actual Perl app now breaks without the-d
, but at least I have a new problem to solve. :)
– curiousgage
9 hours ago
add a comment |
1
Please show us also how you send the POST request to your Perl program.
– Corion
18 hours ago
4
Also, why do you have-d
on the hashbang line of the script?
– Corion
18 hours ago
3
(also, there is no data available on*STDIN
becauseCGI
will already have read all available data there. So, please post a Minimal, Complete, and Verifiable example so we can replicate this. This includes the HTML you're using to submit the POST request.
– Corion
18 hours ago
If you already have access to the POSTed request, I suggest adding it as well, including headers and body etc. I doesn't hurt if people can check actually sent values on their own.
– Thorsten Schöning
9 hours ago
Brilliant! The-d
was the issue here and I'll mark that as the answer. I added the form submit code for posterity (I was using postman to test so I didn't have a sample form file before). And thanks for the explanation on the STDIN. Unfortunately, the actual Perl app now breaks without the-d
, but at least I have a new problem to solve. :)
– curiousgage
9 hours ago
1
1
Please show us also how you send the POST request to your Perl program.
– Corion
18 hours ago
Please show us also how you send the POST request to your Perl program.
– Corion
18 hours ago
4
4
Also, why do you have
-d
on the hashbang line of the script?– Corion
18 hours ago
Also, why do you have
-d
on the hashbang line of the script?– Corion
18 hours ago
3
3
(also, there is no data available on
*STDIN
because CGI
will already have read all available data there. So, please post a Minimal, Complete, and Verifiable example so we can replicate this. This includes the HTML you're using to submit the POST request.– Corion
18 hours ago
(also, there is no data available on
*STDIN
because CGI
will already have read all available data there. So, please post a Minimal, Complete, and Verifiable example so we can replicate this. This includes the HTML you're using to submit the POST request.– Corion
18 hours ago
If you already have access to the POSTed request, I suggest adding it as well, including headers and body etc. I doesn't hurt if people can check actually sent values on their own.
– Thorsten Schöning
9 hours ago
If you already have access to the POSTed request, I suggest adding it as well, including headers and body etc. I doesn't hurt if people can check actually sent values on their own.
– Thorsten Schöning
9 hours ago
Brilliant! The
-d
was the issue here and I'll mark that as the answer. I added the form submit code for posterity (I was using postman to test so I didn't have a sample form file before). And thanks for the explanation on the STDIN. Unfortunately, the actual Perl app now breaks without the -d
, but at least I have a new problem to solve. :)– curiousgage
9 hours ago
Brilliant! The
-d
was the issue here and I'll mark that as the answer. I added the form submit code for posterity (I was using postman to test so I didn't have a sample form file before). And thanks for the explanation on the STDIN. Unfortunately, the actual Perl app now breaks without the -d
, but at least I have a new problem to solve. :)– curiousgage
9 hours ago
add a comment |
1 Answer
1
active
oldest
votes
Removing the -d
from the shebang solves this issue. Kudos to Corion for the answer.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54250230%2fperl-scripts-on-apache-not-retrieving-post-data%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Removing the -d
from the shebang solves this issue. Kudos to Corion for the answer.
add a comment |
Removing the -d
from the shebang solves this issue. Kudos to Corion for the answer.
add a comment |
Removing the -d
from the shebang solves this issue. Kudos to Corion for the answer.
Removing the -d
from the shebang solves this issue. Kudos to Corion for the answer.
answered 8 hours ago
curiousgagecuriousgage
267
267
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54250230%2fperl-scripts-on-apache-not-retrieving-post-data%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Please show us also how you send the POST request to your Perl program.
– Corion
18 hours ago
4
Also, why do you have
-d
on the hashbang line of the script?– Corion
18 hours ago
3
(also, there is no data available on
*STDIN
becauseCGI
will already have read all available data there. So, please post a Minimal, Complete, and Verifiable example so we can replicate this. This includes the HTML you're using to submit the POST request.– Corion
18 hours ago
If you already have access to the POSTed request, I suggest adding it as well, including headers and body etc. I doesn't hurt if people can check actually sent values on their own.
– Thorsten Schöning
9 hours ago
Brilliant! The
-d
was the issue here and I'll mark that as the answer. I added the form submit code for posterity (I was using postman to test so I didn't have a sample form file before). And thanks for the explanation on the STDIN. Unfortunately, the actual Perl app now breaks without the-d
, but at least I have a new problem to solve. :)– curiousgage
9 hours ago