perl-cgi脚本可以't发布到站点-独立工作,但在apache下运行时失败

perl cgi script can't post to site - works standalone but fails when running under apache

本文关键字:工作 独立 但在 apache 失败 运行时 站点 脚本 perl-cgi      更新时间:2023-09-26

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

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

网站URL: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地址访问页面吗?有人能提出一个变通办法吗?

这可能有很多原因。假设实际调用了cgi脚本(即,它安装在web服务器的正确位置(,我将确保LWP实际安装在服务器上。事实上,在各种情况下,我不得不手动安装它,YMMV。

在脚本失败的情况下输出一些诊断将非常有帮助。。。new LWP::UserAgent成功了吗?如果是,帖子后面的$response->status_line是什么?

编辑:

由于您的错误消息是"500权限被拒绝",因此您的web服务器可能已阻止所有传出连接。您应该检查您的提供程序是否允许通过某些代理进行传出http连接,并将其配置到LWP::UserAgent中。如果没有可用的代理,那么可能就没有办法出去了。在不了解您的托管提供商设置的情况下,我们无法提供帮助;也许你可以向你的托管提供商寻求支持。。。

您应该从$url:中删除"url:">

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

启用SELINUX的系统将不允许从web代理(httpd(进行传出连接。

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

# setsebool -P httpd_can_network_connect on

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