我正在尝试从给定的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无法正确获取文件?有任何线索或建议吗?
谢谢。
曼
答案 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
)