| Nis | Дата: Среда, 07.09.2011, 15:15 | Сообщение # 1 |
|
Basicminator
Группа: Администраторы
Сообщений: 46
Статус: 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
|
| |
|
|