Delphi — Indy. Авторизация ВКонтакте

В данной статье я расскажу о способах авторизации в соц.сети ВКонтакте средствами Delphi+Indy.
На форме: Button (для нее и будет писаться код), Memo и IdHTTP.

В переменной PageProfile (string) в итоге у нас окажется код страницы профиля.


Итак, первый способ: самый очевидный — через главную страницу vkontakte.ru.

Заходим на главную страницу, включаем снифер.
Вводим верные данные, видим два запроса, а также то, что после авторизации идет перенаправление на страницу профиля.
Пишем код:

var data:tstringlist;
     PageProfile:string;
     error:boolean;
begin
 IdHTTP1.AllowCookies:=true;
 IdHTTP1.HandleRedirects:=false;
 data:=tstringlist.create;
 data.Add('email=ваш_логин'); // логин для авторизации
 data.Add('pass=пароль');  // пароль для авторизации
 data.Add('expire=');
 data.Add('vk=');
 error:=false;
 try
  PageProfile:=IdHTTP1.Post('http://login.vk.com/?act=login', data);
 except
  error:=true;
 end;

 if not(error) then
  begin
   data.Clear;
   data.Add('s='+Copy(PageProfile, Pos('value', PageProfile)+7, 56));
   data.Add('op=slogin');
   data.Add('redirect=1');
   data.Add('expire=0');
   data.Add('to=');
   IdHTTP1.HandleRedirects:=true;
   try
    PageProfile:=IdHTTP1.Post('http://vkontakte.ru/login.php', data);
   except
   end;
   Memo1.Lines.Add('Авторизация удалась');
  end
 else
  Memo1.Lines.Add('Авторизация не удалась');

 Data.Free;
end;

Примерные затраты траффика для успешной авторизации: ~ (1,26+0,611+37,99) = ~ 39,861 KB


Второй способ: самый новый)) — через Open API.

Совсем недавно ВК предоставил разработчикам возможность авторизации на их сайтах, используя учетную запись ВКонтакте. И на многих сайтах уже появляются кнопочки «Войти ВКонтакте», «Поделиться в друзьями» и т.п.
При нажатии на такую кнопку возникает форма для авторизации в ВК. Опять включаем снифер, вводим данные учетной записи и пишем код:

var data:tstringlist;
      PageProfile:string;
      error:boolean;
begin
 IdHTTP1.AllowCookies:=true;
 IdHTTP1.HandleRedirects:=false;
 data:=tstringlist.create;
 data.Add('act=login');
 data.Add('expire=1');
 data.Add('vk=');
 data.Add('email=ваш_логин');  // логин для авторизации
 data.Add('pass=пароль');  // пароль для авторизации
 data.Add('success_url=http://vkontakte.ru/share.php?act=logged');
 error:=false;
 try
  PageProfile:=IdHTTP1.Post('http://login.vk.com/', data);
 except
  error:=true;
 end;

 if not(error) then
  begin
   data.Clear;
   data.Add('s='+Copy(PageProfile, Pos('value', PageProfile)+7, 56));
   data.Add('op=slogin');
   data.Add('redirect=1');
   data.Add('expire=1');
   data.Add('to=');
   IdHTTP1.HandleRedirects:=true;
   try
    IdHTTP1.Post('http://vkontakte.ru/share.php?act=logged', data);
   except
   end;
   PageProfile:=IdHTTP1.get('http://vkontakte.ru');
   Memo1.Lines.Add('Авторизация удалась');
  end
 else
  Memo1.Lines.Add('Авторизация не удалась');

 Data.Free;
end;

Примерные затраты траффика для успешной авторизации: ~ (1,19+11,11+0,294+38,05) = ~ 50,644 KB


Третий способ: самый простой — просто один GET-запрос.

Откуда есть пошел такой способ не знаю, но раз он есть, грех им не воспользоваться))
Просто GET-запрос, в адрес которого вставляем логин и пароль:

var PageProfile:string;
begin
 IdHTTP1.AllowCookies:=true;
 IdHTTP1.HandleRedirects:=true;
 try
  PageProfile:=IdHTTP1.Get('http://vkontakte.ru/login.php?email=ваш_логин&pass=пароль');
 except
 end;
 if Pos('logout', PageProfile)<>0 then
  Memo1.Lines.Add('Авторизация удалась')
 else
  Memo1.Lines.Add('Авторизация не удалась');
end;

Примерные затраты траффика для успешной авторизации: ~ (0,628+38,02) = ~ 38,648 KB

© Zdez Bil Ya avtuh.ru

Так же смотрите видеоурок по авторизации на сайте Одноклассники

Добавить комментарий