为什么我的Perl CGI脚本会导致500内部服务器错误?

时间:2010-05-20 08:19:59

标签: perl cgi

当我尝试在支持perl的Web服务器中运行以下代码时出现500内部服务器错误:

#! /usr/bin/perl

use LWP;

my $ua = LWP::UserAgent->new;
$ua->agent("TestApp/0.1 ");
$ua->env_proxy();

my $req = HTTP::Request->new(POST => 'http://www.google.com/loc/json');

$req->content_type('application/jsonrequest');
$req->content('{ "cell_towers": [{"location_area_code": "55000", "mobile_network_code": "95", "cell_id": "20491", "mobile_country_code": "404"}], "version": "1.1.0", "request_address": "true"}');

my $res = $ua->request($req);
if ($res->is_success) {
print $res->content,"\n";
} else {
print $res->status_line, "\n";
return undef;
}

但是当我运行以下代码时没有错误:

#! /usr/bin/perl

use CGI::Carp qw(fatalsToBrowser);


print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD><TITLE>Hello World!</TITLE></HEAD>\n";
print "<BODY>\n";
print "<H2>Hello World!</H2> <br /> \n";

foreach $key (sort keys(%ENV)) {
print "$key = $ENV{$key}<p>" ;
}
print "</BODY>\n";
print "</HTML>\n";

所以我认为我的代码存在一些问题。当我使用-wc命令在本地计算机上运行第一个perl脚本时,它表示语法正常。请帮帮我。

4 个答案:

答案 0 :(得分:4)

我假设您将第一个脚本作为CGI脚本运行?您需要包含内容类型:

print "Content-type: text/plain\n\n";

在任何其他输出之前(当然,将text/plain更改为text/html或任何合适的内容!)

答案 1 :(得分:0)

使用您在其他脚本中使用的内容。

print "Content-type: text/html\n\n";
print "<HTML>\n";

另外,请查看CGI Programming以编写健康的脚本。

答案 2 :(得分:0)

如果您看到的只是“500服务器错误”页面,即使使用use CGI::Carp qw(FatalsToBrowser),那么Web服务器也无法启动您的Perl程序 - 它位于错误的位置,perl不是在/usr/bin/perl,目录没有启用cgi执行,或者其他什么。

当您收到500错误时,一般规则是查看Web服务器的错误日志以查看实际的错误消息。

编辑:重新阅读问题并意识到我正在查看“正常工作”的代码,而不是“无法正常工作”的代码。这改变了潜在问题点的列表,并且任何 CGI可执行文件必须返回内容类型的早期答案(即使它不返回任何其他内容)可能是问题,但我原来的回家消息不受影响:“500内部服务器错误”意味着“检查服务器错误日志”。

答案 3 :(得分:0)

500内部服务器错误

可能是由不正确的权限引起的:尝试 CHMOD 755 到您要执行的文件/文件夹..