У меня есть простой сценарий входа с использованием Perl WWW :: Mechanize. Я использую скрипты для входа в систему Moodle. Когда я просто выполняю шаги входа в систему как процедурные шаги, он работает. Например (предположит, что «$ SITE_URL», имя пользователя и пароль был установлен соответствующим образом):Perl WWW :: Механизировать как дочерний класс; не может оставаться включенным на очищенный сайт
#THIS WORKS
$updater->get("http://".$site_url."/login/index.php");
$updater->form_id("login");
$updater->field('username', USERNAME);
$updater->field('password', PASSWORD);
$updater->click();
$updater->get("http://".$site_url."/");
print $updater->content();
Когда я пытаюсь инкапсулировать эти шаги внутри класса ребенка WWW: Механизируйте, ГЮТ() и содержание() и другие методы, похоже, работают, но войти на сайт не работает. У меня такое чувство, что оно связано с переменной областью видимости, но я не знаю, как ее разрешить.
Пример (сбой):
my $updater = new AutoUpdater($site_url, USERNAME, PASSWORD);
$updater->do_login();
{
package AutoUpdater;
use base qw(WWW::Mechanize);
sub new {
my $class = shift;
my $self = {
site_url => shift,
USERNAME => shift,
PASSWORD => shift,
};
bless $self, $class;
return $self;
}
sub do_login {
my $self = shift;
$self->get("http://".$site_url."/");
$self->get("http://".$site_url."/login/index.php");
$self->form_id("login");
$self->field("username", $self->{USERNAME});
$self->field("password", $self->{PASSWORD});
$self->click();
$self->get("http://".$site_url."/");
print $self->content();
}
}
Это терпит неудачу. «Fail» означает, что он не входит в систему. Однако он захватывает веб-страницу, и я могу манипулировать данными HTML. Он просто не входит. Ягр! (Да, «yargh» был необходим)
Спасибо!
Что-то с печеньем возможно? Сделайте некоторые работы с cookie_jar – snoofkin
Кроме того, просто предложение, если вы хотите использовать OO в Perl, используйте Moose, он будет делать магию. – snoofkin