В данной статье я расскажу о способах авторизации в соц.сети ВКонтакте средствами 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;
Второй способ: самый новый)) – через 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;
[COLOR="rgb(0, 255, 255)"]Третий способ: самый простой – просто один GET-запрос.
Откуда есть пошел такой способ не знаю, но раз он есть, грех им не воспользоваться))
Просто GET-запрос, в адрес которого вставляем логин и пароль:[/COLOR]
Код:
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;
(С)автух
________________ [Ссылки могут видеть только зарегистрированные пользователи. ]