wget не работает должным образом внутри Perl-программы - PullRequest
1 голос
/ 14 марта 2011

Я пытаюсь загрузить некоторые XML-файлы с указанного URL.Ниже приведен код, который я использовал для того же самого -

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 ]

3 голосов
/ 14 марта 2011

Вы не должны использовать внешнюю команду в первую очередь.Убедитесь, что 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 голос
/ 14 марта 2011

Если $url или $xml содержит какие-либо метасимволы оболочки (? и & являются общими в URL-адресах), то вам может потребоваться либо указать их правильно

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

или используйте LIST форму system, которая обходит оболочку

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

, чтобы заставить команду работать правильно.

0 голосов
/ 14 марта 2011

возможно, это потому, что путь к wget, что делать, если вы используете:

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

или я думаю, это может быть проблема с переменными, передаваемыми в system: ($username, $password,$url)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...