Войдите на сайт с LWP и Perl - PullRequest
3 голосов
/ 20 мая 2011

Несколько неопытный программист здесь пытается написать программу для входа на сайт моего курса и загрузки всего контента (лекции, домашние задания и т. Д.).Очевидно, это защищенный паролем сайт, поэтому я должен дать ему это.Я хорошо понимаю 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.

Ответы [ 3 ]

5 голосов
/ 20 мая 2011

Вы, вероятно, хотите использовать WWW :: Mechanize , подкласс LWP :: UserAgent, предназначенный для того, чтобы больше походить на браузер, позволяя вам перемещаться по страницам веб-сайта с уже сохраненным хранилищем cookieдля вас.

2 голосов
/ 20 мая 2011

Вы используете credentials, только если сайт использует базовую аутентификацию HTTP, и в этом случае вы не «входите», вы просто передаете учетные данные при каждом запросе.

Если на сайте есть система входа в систему на основе форм, вам нужно использовать cookie_jar и запрашивать URI действия формы с любыми ожидаемыми данными.

0 голосов
/ 09 января 2015
#!/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=yourlogin&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;
}
...