2011-07-03 1 views
1

POST를 사용하여 사이트에서 html 페이지를 가져온 Perl CGI 스크립트를 작성한 후 html 데이터에서 일부 처리를 수행하고 출력을 인쇄합니다 html 콘텐츠.perl cgi 스크립트가 사이트에 게시 할 수 없습니다 - 독립 실행 형이지만 아파치에서 실행 중일 때 오류 발생

내 스크립트 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 주소의 페이지에 액세스하려고했기 때문입니까? 아무도 해결 방법을 제안 할 수 있습니까?

답변

2

여기에는 여러 가지 원인이있을 수 있습니다. cgi 스크립트가 실제로 호출되었다고 가정하면 (즉, 웹 서버의 적절한 위치에 설치되었다고 가정) 서버에 실제로 LWP이 설치되어 있는지 확인합니다. 실제로 여러 경우에 수동으로 설치해야했습니다. YMMV.

스크립트가 실패 할 경우 일부 진단 결과를 출력하는 것이 좋습니다 ... new LWP::UserAgent이 성공합니까? 그렇다면 게시 후 $response->status_line은 무엇입니까?

편집 :

당신의 오류 메시지가 "500 권한이 거부"하기 때문에, 당신의 웹 서버가 나가는 모든 연결을 차단했습니다 가능성이 높습니다. 공급자가 일부 프록시를 통해 나가는 http 연결을 허용하는지 확인하고이를 LWP :: UserAgent로 구성해야합니다. 사용할 수있는 프록시가 없다면 아마도 외출 할 방법이 없을 것입니다. 우리는 귀하의 호스팅 제공 업체 설정을 모른 채 여기서 도울 수 없습니다. 어쩌면 당신은 당신은 제거해야 ... "URL을"

+0

아! $ response-> status_line은 "500 site.com:80에 연결할 수 없습니다 (연결 : 사용 권한이 거부되었습니다)"라고 표시했습니다. – Girish

+0

무엇이 문제 일 수 있다고 생각하십니까? – Girish

+0

내 편집을 참조하십시오. – sergio

0

를 호스팅 제공 업체에 지원을 요청할 수 있습니다 $의 URL에서 :

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

+0

오타는 오타였습니다. "url :"은 실제 코드에 없습니다. – Girish

0

SELINUX 활성화 시스템은 웹 에이전트에서 나가는 연결 (아파치를 허용하지 않습니다). CentOS는 6.3에

당신은 Perl 스크립트에 아파치에서 아웃 바운드 웹 연결을 사용하려면이 명령을 사용할 수 있습니다

# setsebool -P httpd_can_network_connect on 

이 페이지를 SELinux를하고 HTTPD 설정에 대한 더 많은 말할 수 : http://wiki.centos.org/TipsAndTricks/SelinuxBooleans

관련 문제