Скрипт логина Вконтакте на Perl

НЕРАБОЧИЙ — Рабочий логин вконтакте выложил тут — http://www.skazkin.ru/p/novyj-login-vkontakte-perl-curl.html#comments

Пример использования:

  1. my $cookies = getLogin({login=>q[user@email.ru],password=>q[123456]});

В результате получаем или ссылку на массив с куками, которые мы потом можем использовать для логина, или же undef. Под катом сам сниппет.

  1. use Carp;
  2. use LWP::UserAgent;
  3. use HTTP::Cookies;
  4.  
  5. sub getLogin {
  6.     my $params = shift;
  7.     my $ag = qq[MegaBot]# ЮзерАгент
  8.  
  9.     #Ругаемся - если на вход получили фигню
  10.     croak qq[Hash needed!] if ref($params) ne 'HASH';
  11.     croak qq[No login!] if !$params->{login};
  12.     croak qq[No password] if !$params->{password};
  13.  
  14.     # Создаём агента
  15.     my $ua = LWP::UserAgent->new(keep_alive => 1, cookie_jar => HTTP::Cookies->new, timeout => 60);
  16.     $ua->agent($ag);
  17.  
  18.     # Подставляем разные штучки
  19.     $ua->default_header('Referer' => "http://vkontakte.ru/index.php");
  20.     $ua->default_header('X-Requested-With' => "XMLHttpRequest");
  21.     $ua->default_header('Content-Type'=>q[application/xwwwformurlencoded; charset=UTF8]);
  22.     $ua->default_header('Cookie'=>q[remixlang=0; remixchk=5]);
  23.  
  24.     # Совершаем ритуал отправки логина и пароля
  25.     my $x = $ua->post(q[http://vkontakte.ru/login.php], {
  26.                       op        =>  qq[a_login_attempt],
  27.                       email     =>  $params->{login},
  28.                       pass      =>  $params->{password},
  29.                       expire    =>  0
  30.                       });
  31.  
  32.     # Получаем куки
  33.     if(exists $ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixemail}->[1]){
  34.         my @cookies;
  35.         push(@cookies,q[remixmid=].$ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixmid}->[1]);
  36.         push(@cookies,q[remixemail=].$ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixemail}->[1]);
  37.         push(@cookies,q[remixpass=].$ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixpass}->[1]);
  38.         push(@cookies,q[remixsid=].$ua->cookie_jar->{COOKIES}->{'vkontakte.ru'}->{q[/]}->{remixsid}->[1]);
  39.         return \@cookies;
  40.     }
  41.     return undef;
  42. }

8 комментариев

  1. frezer:

    Перестал работать скриптик.

    Потрахался и что-то никак не разберусь в чём дело.

    По $x->content; вылезает строка vklogin и всё.

    Похоже как-то связано с изменившейся главной страницей и тамошними JavaScript скриптами. В JS не силён, видать поэтому не получается никак понять в чём же дело.

  2. ifman:

    Спасибо большое за пост. В принципе, сам бы написал, но удобно когда есть готовое. Попробую разобраться что там не работало.

    Кстати, бложик хороший. Подпишусь. Думал, что интересных IT-блогов уже не осталось.

    • Выше пишут, что работать перестал — ещё не проверял. Но в целом там не составит труда что-то поменять самому — сниппеты предельно простые стараюсь писать :)

      • ifman:

        Уже смотрю модуль Dyatel.pm

        Правда, он зависим, но я смотрю.

        У меня задача простая, как паровоз — распарсить плейлист с аудиозаписей пользователя. Нужно только залогиниться, а дальше — дело техники.

        • Ага

          А я сейчас на курле пытаюсь новую авторизацию сделать. Они сделали серию редиректов — то есть самый простой способ будет хранить куку в файле, — это решение было как раз для того, чтобы в скрипте получить в удобном виде, так сказать :)

          Через часок, думаю, поборю и выложу новый вариант)

          • ifman:

            Ну я бы и так ее в файле хранил. Зачем логиниться каждый раз, как нужно что-то оттуда утянуть? Гораздо проще залогиниться однажды. Сессии они хранят до потери пульса, так что нужно действовать как браузер: логин — получение кук — хранение кук — использование сохраненных кук для следующих обращений.

        • www.skazkin.ru/p/novyj-lo...e-perl-curl.html

          А вот и мы. Уже без выпендрёжа — простой логин в файл+забавная функция, почти полную версию которой сделал предыдущим постом.

          Надеюсь, пригодится.

          с WWW::Curl::Easy бывают проблемы при установке через CPAN — нужен curl.

          В Ubuntu/Debian решается просто — apt-get install libwww-curl-perl

Комментировать

Войдите чтобы оставить комментарий.