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

Форум АНТИЧАТ (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 из кукисов (для авторизации больше ничего и не нужно).


Время: 08:41