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

Cети и Интернет   12 Март 2012  Автор статьи: admin 

В этом уроке я покажу вам достаточно простой и эффективный способ авторизации в небезызвестной социальной сети ВКонтакте, например, для получения какой-либо информации.
Всем известно, что в социальных сетях в настоящее время зарегистрировано огромное количество пользователей, в частности в соц. сети ВКонтакте. Поэтому синхронизация, привязка различных данных из аккаунтов соц. сетей к различным приложениям и играм является достаточно актуальной темой. Для того чтобы получать эту информацию в Delphi, можно провести авторизацию посредством библиотеки Indy, принять все cookies и получить необходимую информацию. В интернете можно найти огромное множество различных способов авторизации ВКонтакте посредством Indy, однако будьте уверены, что 99% этих способов не работают, или перестали работать уже очень давно. Это обуславливается тем, что ВКонтакте постоянно изменяется, в него вносится постоянно множество изменений. Способ, который предлагаю я, на сегодняшний день (12 марта 2012) работает достаточно неплохо. Итак, привожу код самой авторизации с подробными комментариями:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var
s: string;
http: TIdHTTPEx;
begin
http := TIdHTTPEx.Create;
// Создаем экземпляр класса TIdHTTPEx
http.Request.UserAgent :=
'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.7.62 Version/11.01';
// Маскируемся под оперу :)
try
s := http.GetEx('http://vk.com/login.php?m=1&email=' + email +
'&pass=' + pass);
// пробуем залогиниться
// для этого выполняем обычный GET запрос, в котором прямо в адресе передаем
// значения email и pass
except
// при авторизации происходит редирект,
// который обязательно необходимо обработать,
// иначе корректно залогиниться нам не удастся
if http.ResponseCode = 302 then
s := http.GetEx('http://vk.com' + http.Response.Location);
end;

[warning]Обратите внимание на то, что в качестве email`а нужно указывать email, который привязан к аккаунту! Если вы укажете вместо email свой номер телефона, по которому вы регистрировались, или логин, то авторизация скорее всего будет неуспешной. В настоящее время привязка аккаунта ВКонтакте к email не обязательна и при регистрации не требуется. Привязать ваш email к аккаунту можно в настройках аккаунта.[/warning]

Как вы уже заметили, для проведения самой авторизации я использую не стандартный класс TIdHTTP, а TIdHTTPEx, который отличается тем, что более корректно принимает и отправляет печенья. TIdHTTPEx основан естественно на базе стандартного TIdHTTP. Для работы с TIdHTTPEx вам потребуется скачать модуль по этой ссылке, кинуть его в папку с будущим проектом, а затем объявить его в разделе uses.

Итак, если логин и пароль были введены правильно, то авторизация должна пройти без проблем. Чтобы проверить авторизировались ли мы, давайте пропарсим полученный исходный код страницы ВКонтакте, который я поместил в строковую переменную s. Определить успешность авторизации достаточно просто: для этого мы всего лишь поищем в той самой строке s слово ‘logout’, которое появляется в исходном коде в ссылке ‘Выйти’ (для выхода из аккаунта). Если это слово в строке s обнаружено, значит мы успешно авторизировались:

1
2
3
4
 if Pos('logout', s) <> 0 then
ShowMessage('Авторизация успешна')
else
ShowMessage('Авторизация неудачна');

Поместим этот код сразу же после кода с авторизацией.
Теперь, когда мы прошли авторизацию, мы можем получать различную информацию из аккаунта. Делается это достаточно простым парсингом строки s. Можно также зайти на другую страницу ВКонтакте, мы все равно будем авторизованны. Кстати парсить строки очень удобно при помощи библиотеки RegExpr.

  • Befan

    [Error] Unit1.pas(45): Not enough actual parameters
    тут http := TIdHTTPEx.Create

    • http://cybern.ru/ Cyberexpert

      У меня такая ошибка не возникает. Она говорит о том, что не были переданы некоторые необходимые параметры методу Create. Попробуйте так: http := TIdHTTPEx.Create(Form1);

  • Befan

    [Error] Unit1.pas(45): Not enough actual parameters
    тут http := TIdHTTPEx.Create

    • http://cybern.ru/ Cyberexpert

      У меня такая ошибка не возникает. Она говорит о том, что не были переданы некоторые необходимые параметры методу Create. Попробуйте так: http := TIdHTTPEx.Create(Form1);

  • Nothing

    Сейчас уже авторизация  по-другому идет, измените код, пожалуйста. Там в 2 запроса, насколько я понял

  • Елена

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

Научиться программировать

  • на Delphi

  • на Java

  • на C++