Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   [Delphi] Авторизация ВКонтакте (https://forum.antichat.xyz/showthread.php?t=165316)

Kandi 22.12.2009 12:38

[Delphi] Авторизация ВКонтакте
 
Всем, привет) вот возник вопрос по авторизации вконтакте. Написал я пост запрос на авторизацию, вроде как) смотрю через снифер ->

Первый пост запрос:
post = op=a_login_attempt
url = http://vkontakte.ru/login.php

он проходит вроде нормально..по сниферу смарел получает он vklogin, по-моему так и должно быть!

Второй пост запрос:
post = act=login
post = success_url=
post = fail_url=
post = try_to_login=1
post = to=
post = vk=
post = email= + email
post = pass= + pass
url = http://login.vk.com/

этот вроде бы тоже не особо жалуется, и проходит нормально возвращает, что то типа этого:
Код:

<html>
  <head>
    <meta http-equiv='content-type' content='text/html; charset=windows-1251' />
  </head>
  <body onload="document.getElementById('l').submit();">
    <form id='l' method='post' action='http://vkontakte.ru/login.php'>
      <input type='hidden' name='op' id='op' value='slogin' />
      <input type='hidden' name='redirect' id='redirect' value='1' />
      <input type='hidden' name='expire' id='expire' value='0' />
      <input type='hidden' name='to' id='to' value='' />
      <input type='hidden' name='s' id='s' value='Cookie' />
    </form>
  </body>
</html>

Вместо слова Cookie конечно же возвращает куки...

теперь я их копирую, тоже вроде бы нормально копирую...без проблем всё..

Третий пост запрос:

post = op=slogin
post = redirect=1
post = expire=0
post = to=
post = s='+Cookie(<- это скопированные куки)
url = http://vkontakte.ru/login.php

И вот с этого момента, снифер мне начинает возвращать страницу типа ->
/login.php?u=1to=cHJvZmlsZS5waHA-

Вот такое выдаёт снифер, скрин:
http://i008.radikal.ru/0912/ec/81ec81e27407t.jpg


Кто знает с чего он себя так начинает вести? :confused:

sn0w 22.12.2009 12:42

cHJvZmlsZS5waHA = profile.php (base64)

Kandi 22.12.2009 12:43

Цитата:

Сообщение от sn0w
cHJvZmlsZS5waHA = profile.php (base64)

а чуть по русский можно? :D

Kandi 22.12.2009 12:45

Понял) это кодировка base64
cHJvZmlsZS5waHA это и есть profile.php ???
Верно?)
Если да, тогда расскажи, что делать ? :(
как с этим бороться!?

Пуховой 22.12.2009 12:45

Редирект на profile.php = удачная авторизация.

Kandi 22.12.2009 12:47

Цитата:

Сообщение от Пуховой
Редирект на profile.php = удачная авторизация.

Код:

var
  .....
  Http  : TidHttp;
  ....
begin
 try
    Http.HandleRedirects := true;

он как бе в true)
ил надо делать ручками редирект?!

Пуховой 22.12.2009 12:52

А вообще, немного иначе.

1 запрос

op=a_login_attempt

-> http://vk.com/login.php

2 запрос

email=
pass=
expire=
vk=1

-> http://login.vk.com/?act=login

3 запрос

op=slogin
redirect=1
expire=0
to=
s={переменная s из ответа}

-> http://vk.com/login.php

При удачной авторизации, код ответа от сервера будет 302, и редирект на profile.php.

handleredirects лучше остановить в false - проще отловить результат авторизации.

sn0w 22.12.2009 12:56

я бы парсер сделал сразу с учетом того что гдето басе64 юзается, расшифровщик басе64 вообще понты весит.

но тут сценарий просто отсмотри, расшифруй все похожие редиректы и юзай.
а может их вообще не надо декодить и в таком виде и льется. по снифферу удали запросы не потеме и посмотри сценарий.

Kandi 22.12.2009 13:16

Цитата:

Сообщение от sn0w
я бы парсер сделал сразу с учетом того что гдето басе64 юзается, расшифровщик басе64 вообще понты весит.

но тут сценарий просто отсмотри, расшифруй все похожие редиректы и юзай.
а может их вообще не надо декодить и в таком виде и льется. по снифферу удали запросы не потеме и посмотри сценарий.

да мне сначало бы сделать просто без басе64, а там буду совершенствовать.... дело в том, что в 3 пост запросе у меня идёт вроде всё нормально возвращает вот что:
Код:

HTTP/1.1 302 Found
Server: nginx/0.7.59
Date: Tue, 22 Dec 2009 09:04:32 GMT
Content-Type: text/html; charset=windows-1251
Connection: keep-alive
X-Powered-By: PHP/5.2.6-1+lenny3
Set-Cookie: remixlang=3; expires=Wed, 22-Dec-2010 09:04:32 GMT; path=/; domain=.vk.com
Pragma: no-cache
Cache-control: no-store
Set-Cookie: remixchk=5; expires=Tue, 28-Dec-2010 11:04:49 GMT; path=/; domain=.vk.com
P3P: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
Set-Cookie: remixsid=Cookie; expires=Wed, 22-Dec-2010 09:04:32 GMT; path=/; domain=.vk.com
Location: profile.php
Vary: Accept-Encoding
Content-Length: 0

а потом пост делаю на profile.php и тут вылетает redirectURL - /login.php?u=1&to=cHJvZmlsZS5waHA-
(в снифере)
хз че за трабла:(

Пуховой 22.12.2009 13:34

Код:

function test_log_vk (name, pass : string) : string;
var
  http : Tidhttp;
  s : string;
  post : Tstringlist;
  coo : Tidcookiemanager;
  compressor : tidCompressorZLib;
begin
  coo := Tidcookiemanager.Create;
  http := Tidhttp.Create; http.ReadTimeout := 60000; http.AllowCookies := true; http.HandleRedirects := false; http.CookieManager := coo; http.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'; http.Request.AcceptEncoding := 'gzip,deflate';
  compressor := tIdCompressorZLib.Create; http.Compressor := compressor;
  post := Tstringlist.Create;

  http.get ('http://vk.com');
  post.add ('op=a_login_attempt');
  http.post ('http://vk.com/login.php', post);
  post.Clear;

  post.add ('email=' + name);
  post.add ('pass=' + pass);
  post.add ('expire=');
  post.add ('vk=1');
  s := http.post ('http://login.vk.com/?act=login', post);
  post.Clear;

  post.Add ('op=slogin');
  post.Add ('redirect=1');
  post.Add ('expire=0');
  post.Add ('to=');
  post.Add ('s=' + copy (s, 536, 56));
  try
    http.post ('http://vk.com/login.php', post);
  except end;

  if http.Response.Location = 'profile.php' then Result := 'remixsid=' + copy (s, 536, 56) else result := 'false';

  http.Free; coo.Free; post.Free; compressor.Free;
end;

Код от руки писаный, но работает. Возвращает remixsid из кукисов (для авторизации больше ничего и не нужно).

Kandi 22.12.2009 17:36

Ваш код выдаёт ошибку, такую же как и мою, не знаю как он у вас работает!?
Ошибка:
Project Project1.exe raised exception class EIdHTTPProtocolException With Message 'HTTP/1.1 302 Found'. Process stopped. Use Step or Run continue

patcher 22.12.2009 17:46

Вот, пробуй этот код:
Код:

function loginvk(login, pass:string; HTTPClient:TIdHTTP):boolean;
var data:TIdMultiPartFormDataStream; s:string; res:TStringList;
begin;
HTTPClient.HandleRedirects:=True;
Data:=TIdMultiPartFormDataStream.Create;
Data.AddFormField('op', 'a_login_attempt');
HTTPClient.Post('http://vkontakte.ru/login.php', data);
data.Free;
res:=TStringList.Create;
Data:=TIdMultiPartFormDataStream.Create;
Data.AddFormField('email', login);
Data.AddFormField('pass', pass);
Data.AddFormField('expire', '');
Data.AddFormField('vk', '');
res.text:=HTTPClient.Post('http://login.vk.com/?act=login', data);
data.Free;
s:=copy(res[10], 51, length(res[10])-54);
res.Free;
if s<>'ext/css' then begin
Data:=TIdMultiPartFormDataStream.Create;
Data.AddFormField('op', 'slogin');
Data.AddFormField('redirect', '1');
Data.AddFormField('expire', '0');
Data.AddFormField('to', '');
Data.AddFormField('s', s);
HTTPClient.Post('http://vkontakte.ru/login.php', data);
data.Free;
result:=true;
end
else result:=false;
end;

Функция при удачной авторизации возвращает true, при неудачной - false.

Kandi 22.12.2009 18:03

patcher
Какая у тебя Indy, у меня нету компанента IdMultiPartFormDataStream :(

Код:

s:=copy(res[10], 51, length(res[10])-54);
Как я понимаю спускаемся до 10 стр. идём до 51 знака и потом тип копируем 54.
Вообще куки длиной 56 и строка не 10 а 11 в коде(

patcher 22.12.2009 18:05

Эмм....забыл:
Код:

uses IdMultipartFormData

sn0w 22.12.2009 19:28

так у тя там ж в заголовке написано 302 Found... Location: profile.php

блин ща сам посмотрю)

eLWAux 22.12.2009 19:35

100% работает (2а запроса):
Код:

use
    ..IdHTTP,ShellApi,RegExpr..;

var LoginInfo: TStrings;
    r      :TRegExpr;
    page : string;

....

    LoginInfo := TStringList.Create;
    LoginInfo.Clear;
       
    IdHTTP1.Host:='login.vk.com';
    IdHTTP1.Port:=80;
    LoginInfo.Add('op=a_login_attempt');
    try
      page := idhttp1.Post('http://vkontakte.ru/login.php',LoginInfo);
    except
      showmessage('nemogy auth');
      exit;
    end;
    if (pos('captcha_sid',page)>0) then
    begin
            showmessage('this is captchaaaaa!');
            exit;
    end;

    LoginInfo.Clear;
    LoginInfo.Add('email='+edit_login.Text);
    LoginInfo.Add('pass='+edit_pass.Text);
    page := idhttp1.Post('http://pda.vkontakte.ru/login?pda=index&acknowledge=0',LoginInfo);
    r := TRegExpr.Create;
    page := idhttp1.get('http://pda.vkontakte.ru/status');
    if (pos('name="activityhash"',page)<=0) then begin
        showmessage('bad login \ pass');
        exit;
    end;
    showmessage('good login \ pass');

http://www.sendspace.com/file/55jwwv

Kandi 22.12.2009 20:50

Огромное спасибо eLWAux. Наконец, сделал авторизацию!

Kandi 22.12.2009 23:03

К сожалению сделал её только на pda.vkontakte.ru
как быть с vk.com и vkontakte.ru ??? :(

unl1m 23.12.2009 00:27

спасибо ТС

Chrome~ 23.12.2009 01:47

Скачивай исходники программы Vkonpic на этом сайте:
_http://3po.ru/vkonpic/
Там есть рабочая процедура авторизации на vkontakte.ru.

Kandi 23.12.2009 02:14

Цитата:

Сообщение от Chrome~
Скачивай исходники программы Vkonpic на этом сайте:
_http://3po.ru/vkonpic/
Там есть рабочая процедура авторизации на vkontakte.ru.

да, я тоже о ней думал) вообще я туда заглядывал как то) там просто что то типо
Http.Get('http://vkontakte.ru/blablabla&=1&login='+login+'&pass='+pass);
надо будет глянуть :)
хотя меня оч интересует очень пост запросы) в чем проблема не пойму (((
а еще меня оч интересует вот эта тема:
http://forum.antichat.ru/thread165241.html
а сейчас (sleep)25200000;
:o :rolleyes:

flacs 23.12.2009 10:32

У меня на опере не сразу заходит сцуко, сначала вот на эту страницу про которую ТС говорил, приходится еще раз жать Обновить! Раньше такого не было, как обойти эти грабли?

P.S. Opera 9.50.10063 build

Kandi 23.12.2009 16:23

Цитата:

Сообщение от flacs
У меня на опере не сразу заходит сцуко, сначала вот на эту страницу про которую ТС говорил, приходится еще раз жать Обновить! Раньше такого не было, как обойти эти грабли?

P.S. Opera 9.50.10063 build

че то я тебя не особо понял) ты на опере заходишь вконтакт и тебя выкидывает на страницу -
http://vkontakte.ru/login.php?u=1to=cHJvZmlsZS5waHA-
что то типо того?)
потом жмёшь обновить и заходит вконтакт?)! :confused:

flacs 23.12.2009 18:48

поставил оперу 10, теперь все норм.

Kandi 26.12.2009 01:31

Установил Delphi 2010. Функция авторизации от Пухового заработала :)
Просто мистика, на Delphi 7 зависала :(
Спасибо всем за помощь)


Время: 04:40