wget在Perl程序中无法正常工作

时间:2011-03-14 11:55:14

标签: perl unix

我正在尝试从给定的URL下载一些xml文件。下面是我用于相同的代码 -

use strict;
use warnings;

my $url ='https://givenurl.com/';
my $username ='scott';
my $password='tiger';

system("wget --user=$username --password=$password $url") == 0 or die "system execution failed ($?): $!";
local $/ = undef;
open(FILE, "<index.html") or die "not able to open $!";
my $index = <FILE>;
my @childs = map /<a\s+href\=\"(AAA.*\.xml)\">/g , $index;

for my $xml (@childs)
{
  system("wget --user=$username --password=$password $url/$xml");
}

但是当我运行它时,它会卡在for-loop wget命令中。似乎wget无法正确获取文件?有任何线索或建议吗?

谢谢。

3 个答案:

答案 0 :(得分:3)

您不应该首先使用外部命令。 确保WWW::Mechanize可用,然后使用以下代码:

use strict;
use warnings;

use WWW::Mechanize;

my $mech = WWW::Mechanize->new();

...

$mech->credentials($username, $password);
$mech->get($url);
foreach my $link ($mech->find_all_links(url_regex=>qr/\bAAA/)) {
    $mech->get($link);
    ...
}

答案 1 :(得分:1)

如果$url$xml包含任何shell元字符(?&是网址中的常见字符),那么您可能需要正确引用它们

system("wget --user=$username --password=$password '$url/$xml'");
system qq(wget --user=$username --password=$password "$url/$xml");

或使用绕过shell的LIST system形式

system( 'wget', "--user=$username", "--password=$password", "$url/$xml");

让命令正常工作。

答案 2 :(得分:0)

也许是因为wget的路径,如果你使用的话:

system("/usr/bin/wget --user=$username --password=$password $url")

或者我认为传递给system的变量可能会出现问题:( $username$password$url