Как я могу войти в систему и скачать файл с помощью Perl WWW :: Mechanize? - PullRequest
2 голосов
/ 06 октября 2010

Я пытаюсь использовать Perl WWW :: Mechanize для загрузки файла. Я должен войти на веб-сайт до, а затем, после проверки формы, загрузить файл.

Дело в том, что после нескольких часов мне не удавалось делать то, что я хочу. В конце сценарий сохраняет файл, который является не zip-файлом, а html-файлом, в котором нет ничего интересного.

Вот скрипт, который я сделал:

use WWW::Mechanize;
use Crypt::SSLeay;

my $login = "MyMail";
my $password = "MyLogin";
my $url = 'http://www.lemonde.fr/journalelectronique/donnees/protege/20101002/Le_Monde_20101002.zip';

$bot = WWW::Mechanize->new();
$bot->cookie_jar(
    HTTP::Cookies->new(
        file           => "cookies.txt",
        autosave       => 1,
        ignore_discard => 1,
    )
);

$response = $bot->get($url);

$bot->form_name("formulaire");
$bot->field('login', $login);
$bot->field('password', $password);
$bot->submit();

$response = $bot->get($url);
my $filename = $response->filename;

if (! open ( FOUT, ">$filename" ) ) {
    die("Could not create file: $!" );
}
print( FOUT $bot->response->content() );
close( FOUT );

Не могли бы вы помочь мне найти ошибки, которые я совершил?

Ответы [ 2 ]

3 голосов
/ 06 октября 2010

Есть некоторые скрытые поля ввода, которые, как я предполагаю, заполняются, когда вы переходите к загрузке с помощью браузера, а не с помощью URL-адреса напрямую.

Кроме того, они устанавливают некоторые куки-файлы через JavaScript, и они не будут приняты Mechanize. Тем не менее, существует плагин WWW :: Mechanize :: Plugin :: JavaScript , который может вам в этом помочь (у меня нет с ним опыта).

Используйте LiveHTTPHeaders , чтобы увидеть, что отправлено браузером, и повторить это (при условии, что вы не нарушаете их TOS).

0 голосов
/ 06 октября 2010

Проблема, о которой вы говорите, хорошо известна в Механизации. Самое простое решение - использовать библиотеку Raspo.

...