Perl CGI скрипт не может публиковать на сайте - работает автономно, но не работает при работе под Apache - PullRequest
1 голос
/ 03 июля 2011

Я написал CGI-скрипт Perl, который извлекает html-страницу с сайта, используя POST, затем выполняет некоторую обработку 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 ...

Сценарий работает нормально при запуске из командной строки, но не может извлечь страницу HTML с сайта при запуске с веб-сервера. Это потому, что скрипт пытается получить доступ к странице из другого домена / IP-адреса? Кто-нибудь может предложить обходной путь?

Ответы [ 3 ]

2 голосов
/ 03 июля 2011

Там может быть много причин для этого.Предполагая, что скрипт cgi действительно вызывается (т.е. он установлен в правильном месте для вашего веб-сервера), я бы гарантировал, что LWP действительно установлен на вашем сервере.Действительно, в некоторых случаях мне приходилось устанавливать его вручную, YMMV.

Было бы очень полезно вывести некоторую диагностику при сбое сценария ... Успешно ли работает new LWP::UserAgent?если это так, что означает $response->status_line после сообщения?

РЕДАКТИРОВАТЬ:

Так как ваше сообщение об ошибке "500 отказано в разрешении", вполне вероятно, что ваш веб-сервер заблокировал все исходящие соединения.Вы должны проверить, разрешает ли ваш провайдер исходящее http-соединение через некоторый прокси-сервер, и настроить его в LWP :: UserAgent.Если нет доступного прокси, возможно, нет выхода.Мы не можем здесь помочь, не зная настроек вашего хостинг-провайдера;может быть, вы можете обратиться в службу поддержки вашего хостинга ...

0 голосов
/ 10 февраля 2013

Системы с поддержкой SELINUX не разрешат исходящее соединение от веб-агента (httpd).

В CentOS 6.3 вы можете использовать эту команду для включения исходящих веб-соединений из Apache в сценарии Perl:

# setsebool -P httpd_can_network_connect on

Эта страница может рассказать вам больше о настройках SELinux и HTTPD: http://wiki.centos.org/TipsAndTricks/SelinuxBooleans

0 голосов
/ 05 июля 2011

Вы должны удалить «url:» из $ url:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...