0

LWP::UserAgent を使用して Web ページのコンテンツを収集しようとしていますが、何らかの理由でスクリプトを実行すると、次のような 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 に答える