Просмотр полной версии : [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 (http://i008.radikal.ru/0912/ec/81ec81e27407.jpg)
Кто знает с чего он себя так начинает вести? :confused:
cHJvZmlsZS5waHA = profile.php (base64)
cHJvZmlsZS5waHA = profile.php (base64)
а чуть по русский можно? :D
Понял) это кодировка base64
cHJvZmlsZS5waHA это и есть profile.php ???
Верно?)
Если да, тогда расскажи, что делать ? :(
как с этим бороться!?
Редирект на profile.php = удачная авторизация.
Редирект на profile.php = удачная авторизация.
var
.....
Http : TidHttp;
....
begin
try
Http.HandleRedirects := true;
он как бе в true)
ил надо делать ручками редирект?!
А вообще, немного иначе.
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 - проще отловить результат авторизации.
я бы парсер сделал сразу с учетом того что гдето басе64 юзается, расшифровщик басе64 вообще понты весит.
но тут сценарий просто отсмотри, расшифруй все похожие редиректы и юзай.
а может их вообще не надо декодить и в таком виде и льется. по снифферу удали запросы не потеме и посмотри сценарий.
я бы парсер сделал сразу с учетом того что гдето басе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-
(в снифере)
хз че за трабла:(
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 из кукисов (для авторизации больше ничего и не нужно).
Ваш код выдаёт ошибку, такую же как и мою, не знаю как он у вас работает!?
Ошибка:
Project Project1.exe raised exception class EIdHTTPProtocolException With Message 'HTTP/1.1 302 Found'. Process stopped. Use Step or Run continue
Вот, пробуй этот код:
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.
patcher
Какая у тебя Indy, у меня нету компанента IdMultiPartFormDataStream :(
s:=copy(res[10], 51, length(res[10])-54);
Как я понимаю спускаемся до 10 стр. идём до 51 знака и потом тип копируем 54.
Вообще куки длиной 56 и строка не 10 а 11 в коде(
Эмм....забыл:
uses IdMultipartFormData
так у тя там ж в заголовке написано 302 Found... Location: profile.php
блин ща сам посмотрю)
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
Огромное спасибо eLWAux. Наконец, сделал авторизацию!
К сожалению сделал её только на pda.vkontakte.ru
как быть с vk.com и vkontakte.ru ??? :(
Скачивай исходники программы Vkonpic на этом сайте:
_http://3po.ru/vkonpic/
Там есть рабочая процедура авторизации на vkontakte.ru.
Скачивай исходники программы 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:
У меня на опере не сразу заходит сцуко, сначала вот на эту страницу про которую ТС говорил, приходится еще раз жать Обновить! Раньше такого не было, как обойти эти грабли?
P.S. Opera 9.50.10063 build
У меня на опере не сразу заходит сцуко, сначала вот на эту страницу про которую ТС говорил, приходится еще раз жать Обновить! Раньше такого не было, как обойти эти грабли?
P.S. Opera 9.50.10063 build
че то я тебя не особо понял) ты на опере заходишь вконтакт и тебя выкидывает на страницу -
http://vkontakte.ru/login.php?u=1to=cHJvZmlsZS5waHA-
что то типо того?)
потом жмёшь обновить и заходит вконтакт?)! :confused:
поставил оперу 10, теперь все норм.
Установил Delphi 2010. Функция авторизации от Пухового заработала :)
Просто мистика, на Delphi 7 зависала :(
Спасибо всем за помощь)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot