perl cgi脚本无法发布到站点 - 独立工作但在apache下运行时失败

时间:2011-07-03 07:28:48

标签: javascript jquery perl cgi

我编写了一个Perl CGI脚本,该脚本使用POST从站点获取html页面,然后对html数据进行一些处理并打印输出html内容。

我的脚本网址:http://mysite.com/cgi-bin/p.pl

网站网址:http://site.com/interesting.asp

#!/usr/bin/perl
# p.pl
...

sub post_url {
    my( $url, $formref ) = @_;
    my $ua = new LWP::UserAgent(timeout => 300);
    my $response = $ua->post($url, $formref );

if( $response->is_success ){
    return $response->content;
} else {
    return undef;
}
}

my $url = 'url: http://site.com/interesting.asp';
my %param = ('eno' => '1234', 'submit' => 'Submit');
my $htmlcontent = post_url( $url, \%param );    # <--- Not working

... do some processing on $htmlcontent ...

... print out html page ...

从命令行运行时脚本运行正常,但从Web服务器运行时无法从站点获取HTML页面。是因为它尝试从不同的域/ IP地址访问页面的脚本?任何人都可以建议一个解决方法吗?

3 个答案:

答案 0 :(得分:2)

这可能有很多原因。假设实际调用了cgi脚本(即,它安装在您的Web服务器的适当位置),我将确保您的服务器上实际安装了LWP。实际上,在不同的场合我不得不手动安装它,YMMV。

在脚本失败的情况下输出一些诊断信息真的很有帮助... new LWP::UserAgent成功吗?如果是这样,帖子后$response->status_line是什么?

编辑:

由于您的错误消息是“500权限被拒绝”,因此您的Web服务器可能已阻止所有传出连接。您应该检查您的提供商是否允许通过某个代理进行传出http连接,并将其配置为LWP :: UserAgent。如果没有可用的代理,那么可能没有办法出去。但是,如果不知道您的托管服务提供商设置,我们无法帮助您;也许你可以问你的托管服务提供商支持......

答案 1 :(得分:0)

您应该从$ url:

中删除“url:”

my $url = 'http://site.com/interesting.asp';

答案 2 :(得分:0)

启用SELINUX的系统不允许来自Web代理(httpd)的传出连接。

在CentOS 6.3上,您可以使用此命令在Perl脚本中启用Apache的出站Web连接:

# setsebool -P httpd_can_network_connect on

此页面可以告诉您有关SELinux和HTTPD设置的更多信息: http://wiki.centos.org/TipsAndTricks/SelinuxBooleans