Приветствую Вас, Гость! Регистрация RSS

Мой сайт

Четверг, 25.06.2026
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Maxxx  
АВТОРИЗАЦИЯ ВКОНТАКТЕ
NisДата: Среда, 07.09.2011, 15:15 | Сообщение # 1
Basicminator
Группа: Администраторы
Сообщений: 46
Репутация: 32767
Статус: Offline
В данной статье я расскажу о способах авторизации в соц.сети ВКонтакте средствами Delphi+Indy.
На форме: Button (для нее и будет писаться код), Memo и IdHTTP.

В переменной PageProfile (string) в итоге у нас окажется код страницы профиля
Итак, первый способ: самый очевидный – через главную страницу vkontakte.ru.
Заходим на главную страницу, включаем снифер.
Вводим верные данные, видим два запроса, а также то, что после авторизации идет перенаправление на страницу профиля.
Пишем код:
Code
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.
Совсем недавно ВК предоставил разработчикам возможность авторизации на их сайтах, используя учетную запись ВКонтакте. И на многих сайтах уже появляются кнопочки “Войти ВКонтакте”, “Поделиться в друзьями” и т.п.
При нажатии на такую кнопку возникает форма для авторизации в ВК. Опять включаем снифер, вводим данные учетной записи и пишем код:
Code
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-запрос, в адрес которого вставляем логин и пароль:
Code
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
 
  • Страница 1 из 1
  • 1
Поиск: