#perl #login #webclient #lwp
#perl #аутентификация #webclient #lwp
Вопрос:
Здесь несколько неопытный программист пытается написать программу для входа на сайт моих курсов и загрузки всего содержимого (лекции, домашние задания и т.д.). Очевидно, что это сайт, защищенный паролем, поэтому я должен предоставить ему это. Я достаточно хорошо понимаю LWP::UserAgent и тому подобное, и что мне нужно использовать учетные данные. Чего я не могу понять, так это как перейти на следующую страницу. Я могу зайти в систему, но как perl получает результат моего входа в систему?
пример кода (очевидно, я извлек информацию из журнала):
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $url = 'login URL';
$ua -> credentials(
$url,
'',
'user',
'pass'
);
my $response = $ua ->get($url);
print $response->content;
содержимое из ответа — это то же содержимое, что и то, что я получил бы, как если бы я не передавал никаких учетных данных. Очевидно, я здесь чего-то не хватает….
О, еще одна вещь, на сайте моих собственных курсов нет уникального URL, насколько я знаю.
Ответ №1:
Вероятно, вы захотите использовать WWW::Mechanize, подкласс LWP::UserAgent, разработанный, чтобы действовать скорее как браузер, позволяя вам перемещаться по страницам веб-сайта с уже созданным для вас хранилищем файлов cookie.
Комментарии:
1. Также спасибо. Опять немного чтения! (Я знал, что это было там, но иногда я думаю, что все дело в поиске в нужных местах)
Ответ №2:
Вы используете только credentials
, если сайт использует HTTP basic auth, в этом случае вы не «входите в систему», вы просто передаете учетные данные с каждым запросом.
Если на сайте установлена система входа на основе формы, то вам нужно использовать cookie_jar
и запросить URI действия формы с любыми данными, которые она ожидает.
Комментарии:
1. спасибо за быстрый ответ. Я думаю, мне нужно почитать о HTTP, о том, как работает Веб и т.д.
Ответ №3:
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Cookies;
my $ua=LWP::UserAgent->new(timeout => 20);
$ua->agent('Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.8) Gecko/20100202 MRA 5.5 (build 02842) Firefox/3.5.8');
$ua->requests_redirectable(0);
my $cook = HTTP::Cookies->new;
$ua->cookie_jar($cook);
print = requester('http://urlexample/login.php', 'login=yourloginamp;password=pass' )->as_string;
sub requester
{
my $type = 'GET';
if($_[1]){$type = 'POST'}
my $req = HTTP::Request->new($type => $_[0]);
$req->content_type('application/x-www-form-urlencoded; charset=UTF-8');
if($_[1]){$req->content($_[1])}
my $res = $ua->request($req);
return $res;
}