Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Vkontakte, Не запоминаются cookies 
V
    Опции темы
Proxin
Дата 23.8.2009, 00:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: 1
Всего: 3



Собственно, проблема такая. На вконтакт авторизовался успешно - в ответ на post-запрос получаю good и рандомные циферки, как надо. Но когда я пытаюсть с этого же tidhttp получить get-ом страничку vkontakte.ru/feed2.php, то получаю только id=-1 - как бы даже и не логинился секунду до этого. AllowCookies стоит True, тидкукисманаджер - подключён, хендлередиректс - тоже тру. Версия инди - свеженькая, последняя, delphi версии седьмой.
В коде идёт так -
somestring:=http.post('http://www.vkontakte.ru/login.php',dt); {тут получаю good и циферки}
а дальше
somestring2:=http.get('http://www.vkontakte.ru/feed2.php');
{уже получаю то самое id=-1, как будто и не заходил.}
Подозрение, что тидкукисманаджер не сохраняет кукизов от пост-запроса. 
Полный код - вот:
Код

procedure login(mail,pass:string);
var dt:tstringlist;s,name:string;
    {coom:tidcookiemanager;}
begin
frmcl.http.HandleRedirects:=true;
{cm:=tidcookiemanager.Create(frmcl.http);}
frmcl.http.CookieManager:=frmcl.coom;
frmcl.http.AllowCookies:=true;
dt:=tstringlist.Create;
dt.Add('op=a_login_attempt');
dt.add('email='+mail);
dt.Add('pass='+pass);
dt.add('expire=0');
s:=frmcl.http.Post('http://www.vkontakte.ru/login.php',dt);
if (pos(s,'good')=0) then messagebox(0,'Auth sucsess','Message',0);
s:=frmcl.http.Get('http://www.vkontakte.ru/feed2.php');
frmcl.Memo1.Text:=s;
end;

В чём может быть ошибка? 

Это сообщение отредактировал(а) Proxin - 23.8.2009, 02:05
PM MAIL   Вверх
mr_smit
Дата 23.8.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: 3
Всего: 4



Тема контакта уже вылизана до блеска. http://forum.vingrad.ru/topic-159803.html
PM MAIL   Вверх
Proxin
Дата 23.8.2009, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: 1
Всего: 3



Понятно, в принципе. Но не получается.
Пытался сделать метод override'ом, но пишет, что нельзя. А если изменить в исходниках и кинуть tidcookiemanager.pas в проект, то вылазит куча ошибок, в том числе и  c idhttp.
Как правильно запихнуть изменённый idcookiemanager в проект?
PM MAIL   Вверх
Proxin
Дата 23.8.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: 1
Всего: 3



Всё, разобрался.
Если что - вот код готовой авторизации на вконтакте в виде процедуры(мыло, пароль). Требует компоненты idhttp и idcookiemanager.

Код

procedure getcookie(st:string);
var i,j:integer;
    ncookie:string;
begin
ncookie:='';
for i:=1 to length(st) do
if copy(st,i,10) = 'Set-Cookie' then
begin
for j := i+11 to length(st) do
if st[j] = ';' then
begin
ncookie := ncookie + copy(st,i+11,j-i-10);
break;
end;
end;
if length(ncookie) > 50 then
begin
ncookie := 'Connection: Keep-Alive'+#13+'Cache-Control: no-cache'+#13+'Cookie: remixchk=5'+'Cookie: '+ncookie;
frmcl.http.Request.CustomHeaders.Clear;
frmcl.http.Request.CustomHeaders.Add(ncookie);
end;
end;

procedure login(mail,pass:string);
var dt:tstringlist;s:string;
begin
frmcl.http.HandleRedirects:=true;
frmcl.http.CookieManager:=frmcl.coom;
frmcl.http.AllowCookies:=true;
dt:=tstringlist.Create;
dt.Add('op=a_login_attempt');
dt.add('email='+mail);
dt.Add('pass='+pass);
dt.add('expire=0');
s:=frmcl.http.Post('http://www.vkontakte.ru/login.php',dt);
if (pos('good',s)<>0) then begin {messagebox(0,'Auth sucsess','Message',0);} LoggedIn:=true; end;
if (s='failed') then begin {messagebox(0,'Login attempt falied','Message',0);} LoggedIn:=false; end;
if (LoggedIn) then begin
dt.Clear;
dt:=frmcl.http.Response.RawHeaders;
{got cookies. response ok.}
getcookie(dt.Text);
{set the fucking cookie to normal state. ok.}
s:=frmcl.http.Get('http://www.vkontakte.ru/feed2.php');
if (s='{"user": {"id": -1}}') then LoggedIn:=false else LoggedIn:=true;
end;
if (not LoggedIn) then messagebox(0,'Вход не выполнен. Возможно, вы указали'+#13#10+'неверную пару логин/пароль.','Ошибка',0);
if (LoggedIn) then messagebox(0,'U sucsessfuly logged in','Info',0);
end;

Упд. Компоненты нужны (по крайней мере, точно будет работать всё) из indy10, свежие. Тидкукиманаджер и тидхттп - те,что были в пакетах, не измененные. 

Это сообщение отредактировал(а) Proxin - 23.8.2009, 21:48
PM MAIL   Вверх
Proxin
Дата 13.9.2009, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: 1
Всего: 3



Уютный вконтактик сменил способ авторизации - теперь она идёт через отдельный сервер login.vk.com. Выкладываю новый рабочий - кому надо - пользуйте и разбирайтесь. Нужно всё то же - тидкукисманагер и тидхттп из библиотеки инди.
Код

uses idhttp,idcookiemanager;
var http:tidhttp;
      coom:tidcookiemanager;
procedure getcookie(st:string);
var i,j:integer;
    ncookie:string;
begin
ncookie:='';
for i:=1 to length(st) do
if copy(st,i,10) = 'Set-Cookie' then
begin
for j := i+11 to length(st) do
if st[j] = ';' then
begin
ncookie := ncookie + copy(st,i+11,j-i-10);
break;
end;
end;
if length(ncookie) > 50 then
begin
ncookie := 'Connection: Keep-Alive'+#13+'Cache-Control: no-cache'+#13+'Cookie: remixchk=5'+'Cookie: '+ncookie;
http.Request.CustomHeaders.Clear;
http.Request.CustomHeaders.Add(ncookie);
end;
end;

procedure login(mail,pass:string);
var reqs:tstringlist;resp,s:widestring;
begin
http:=TIdHTTP.Create(nil);
coom:=TIdCookieManager.Create(http);
http.AllowCookies:=true;
http.CookieManager:=coom;
http.HandleRedirects:=true;
http.ProtocolVersion:=pv1_1;
reqs:=tstringlist.Create;
reqs.Add('email='+mail);
reqs.Add('pass='+pass);
reqs.Add('vk=');
resp:=http.Post('http://login.vk.com/?act=login',reqs);
delete(resp,1,pos('value=',resp)-1+length('value='''));
s:=copy(resp,1,pos('''',resp)-1);
reqs.Clear;
reqs.Add('s='+s);
resp:=http.Post('http://vkontakte.ru/login.php?op=slogin',reqs);
reqs:=http.Response.RawHeaders;
getcookie(reqs.Text);
end;



Это сообщение отредактировал(а) Proxin - 13.9.2009, 22:57
PM MAIL   Вверх
Proxin
Дата 21.10.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: 1
Всего: 3



Вконтактик опять сменил способ авторизации. Апдейт кода:
Код

uses idhttp,idcookiemanager;
var http:tidhttp;
      coom:tidcookiemanager;
procedure getcookie(st:string);
var i,j:integer;
      ncookie:string;
begin
ncookie:='';
for i:=1 to length(st) do
if copy(st,i,10) = 'Set-Cookie' then
begin
for j := i+11 to length(st) do
if st[j] = ';' then
begin
ncookie := ncookie + copy(st,i+11,j-i-10);
break;
end;
end;
if length(ncookie) > 50 then
begin
ncookie := 'Connection: Keep-Alive'+#13+'Cache-Control: no-cache'+#13+'Cookie: remixchk=5'+'Cookie: '+ncookie;
http.Request.CustomHeaders.Clear;
http.Request.CustomHeaders.Add(ncookie);
end;
end;

procedure VKlogin(mail,pass:string);
var reqs:tstringlist;resp,s:widestring;
begin
http:=TIdHTTP.Create(nil);
coom:=TIdCookieManager.Create(http);
http.AllowCookies:=true;
http.CookieManager:=coom;
http.HandleRedirects:=true;
http.ProtocolVersion:=pv1_1;
reqs:=tstringlist.Create;
reqs.Add('act=login');
reqs.Add('success_url=');
reqs.Add('fail_url=');
reqs.Add('try_to_login=1');
reqs.Add('to=');
reqs.Add('vk=');
reqs.Add('email='+mail);
reqs.Add('pass='+pass);
reqs.Add('expire=');
resp:=http.Post('http://login.vk.com/',reqs);
delete(resp,1,pos('id=''s''',resp)+13);
s:=copy(resp,1,pos('''',resp)-1);
reqs.Clear;
reqs.Add('op=slogin');
reqs.Add('redirect=1');
reqs.Add('expire=0');
reqs.Add('to=');
reqs.Add('s='+s);
resp:=http.Post('http://vkontakte.ru/login.php?',reqs);
reqs:=http.Response.RawHeaders;
getcookie(reqs.Text);
end;

PM MAIL   Вверх
MetalFan
Дата 21.10.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



вконтактники наверное от таких и шифруются) что-то зачастили смены алгоритма авторизации)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Proxin
Дата 10.11.2009, 23:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 363
Регистрация: 21.6.2008

Репутация: 1
Всего: 3



Снова сменили авторизацию. Вот код:
Код

uses idhttp,idcookiemanager;
var http:tidhttp;coom:tidcookiemanager;
procedure getcookie(st:string);
var i,j:integer;
    ncookie:string;
begin
ncookie:='';
for i:=1 to length(st) do
if copy(st,i,10) = 'Set-Cookie' then
begin
for j := i+11 to length(st) do
if st[j] = ';' then
begin
ncookie := ncookie + copy(st,i+11,j-i-10);
break;
end;
end;
if length(ncookie) > 50 then
begin
ncookie := 'Connection: Keep-Alive'+#13+'Cache-Control: no-cache'+#13+'Cookie: remixchk=5'+'Cookie: '+ncookie;
http.Request.CustomHeaders.Clear;
http.Request.CustomHeaders.Add(ncookie);
end;
end;
procedure login(mail,pass:string);
var reqs:tstringlist;resp,s:widestring;
begin
http:=TIdHTTP.Create(nil);
coom:=TIdCookieManager.Create(http);
http.AllowCookies:=true;
http.CookieManager:=coom;
http.HandleRedirects:=true;
http.ProtocolVersion:=pv1_1;
reqs:=tstringlist.Create;
reqs.Add('email='+mail);
reqs.Add('pass='+pass);
reqs.Add('expire=');
reqs.Add('vk=');
resp:=http.Post('http://login.vk.com/?act=login',reqs);
delete(resp,1,pos('id=''s''',resp)+13);
s:=copy(resp,1,pos('''',resp)-1);
reqs.Clear;
reqs.Add('op=slogin');
reqs.Add('redirect=1');
reqs.Add('expire=0');
reqs.Add('to=');
reqs.Add('s='+s);
resp:=http.Post('http://vkontakte.ru/login.php?',reqs);
reqs:=http.Response.RawHeaders;
getcookie(reqs.Text);
end;

УПД: Скажите, полезен ли материал?
PM MAIL   Вверх
Roen
Дата 11.11.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 30.4.2008

Репутация: нет
Всего: нет



Да, материал очень полезен  smile 
PM MAIL   Вверх
Ergoz
Дата 13.11.2009, 04:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 3.6.2009
Где: Россия

Репутация: нет
Всего: нет



Ещё как полезен!!! мне нубу для изучения и вдупления как же всё таки поправлены кукисы )

буду ждать дальнейших апдейтов
PM MAIL ICQ   Вверх
MetalFan
Дата 13.11.2009, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 14
Всего: 128



Proxin, кстати, для работы кукименеджера необязательно его создавать. достаточно указать AllowCookies = true.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1298 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.