0

我正在尝试使用 LWP::UserAgent 来收集网页的内容,但由于某种原因,当我运行脚本时,我得到一个 Windows 弹出窗口说:

Perl 命令行解释器已停止工作

我不知道为什么,因为我已将代码简化为以下基本要素:

#!C:/Perl/bin/Perl.exe
use LWP::UserAgent;

$URL = 'http://www.google.com';

my $oHTTPAgent = new LWP::UserAgent;
$oRequest = HTTP::Request->new('GET');
$oRequest->url($URL);
$sResponse = $oHTTPAgent->request($oRequest);
if ($sResponse->is_success) {
    $sPage = $sResponse->content;
}

print $sPage;

可能是什么问题呢?

4

2 回答 2

3

您正在访问不允许使用机器人的 google.com。我不知道这是否是你的问题,但如果你得到一个不成功的响应,你就没有另一个分支。在您的 Perl 程序结束时,您的程序将关闭而不打印任何内容。

use LWP::UserAgent;

$url = 'http://www.perl.com';

my $ua = LWP::UserAgent->new;
my $response = $ua->get( $url );
print $response->content if $response->is_success;

print "I'm done!\n";

您可能还对Mojo::UserAgent感兴趣:

use Mojo::UserAgent;

$url = 'http://www.perl.com';

my $ua = Mojo::UserAgent->new;
print $ua->get( $url )->res->body;

print "I'm done!\n";
于 2012-03-05T20:23:56.893 回答
2

编写脚本时要考虑的一些常见事项:

  • 添加use strict;
  • 添加use warnings;

路径C:/Perl/bin/Perl.exe存在吗?shebang{#} 应该指向安装 Perl 的路径。

代码中使用的一些变量没有声明,修改后的代码如下:

use strict;
use warnings;
use LWP::UserAgent;

my $URL = 'http://www.google.com';
my $oHTTPAgent = new LWP::UserAgent;
my $oRequest = HTTP::Request->new('GET');
$oRequest->url($URL);
my $sResponse = $oHTTPAgent->request($oRequest);
if ($sResponse->is_success) {
    my $sPage = $sResponse->content;
    print $sPage;
}
于 2012-03-05T11:54:22.187 回答