Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2012, 21:31   #11
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
function pars(a,b,s:string):string;
var
t:string;
begin
if b<>'' then begin
t:=copy(s,pos(a,s)+length(a),length(s));
t:=copy(t,1,pos(b,t)-1);
result:=t;
end else begin
t:=copy(s,pos(a,s)+length(a),length(s));
result:=t;
end;
end;
function auth(l, p: string): BOOLEAN;
type status_auth=(onlogin,onfailed,oncaptcha);
var
  data:tstringlist;
  PageProfile,sid:string;
  i: Integer;
  status:status_auth;
  s, c, remixchk, remixsid: string;
begin
go:
http.CookieManager.CookieCollection.Clear;
  HTTP.AllowCookies:=true;
  HTTP.HandleRedirects:=false;
  data:=tstringlist.create;
data.Add('act=login');
data.Add('q=1');
data.Add('al_frame=1');
data.Add('expire=');

data.Add('from_host=vkontakte.ru');
data.Add('email='+l);                                                      
data.Add('pass='+p);
captcha_sid:='';
captcha_key :='';
try  
PageProfile:=HTTP.Post('http://login.vk.com/?act=login', data);
except                                  
PageProfile:=http.Get(http.Response.Location);     
end;                      
if pos('onLoginDone',PageProfile)<>0 then
status:=onlogin
else if pos('onLoginFailed',PageProfile)<>0 then
status:=onfailed
else
status:=oncaptcha;
case status of
onlogin:
begin
c := http.Response.RawHeaders.Text;
while (pos('sid=deleted; expires=',c)>0) do
delete(c,pos('sid=deleted; expires=',c),length('sid=deleted; expires=')+length('GMT; path=/; domain=.vk.com'));//Несколько раз вк посылает пустые куки их нужно удалить
i := Pos('remixsid', c) + 9;
remixsid := Copy(c, i, length(c));
remixsid := Copy(remixsid, 1, pos(';',remixsid)-1);
http.Request.CustomHeaders.Text := 'Cookie: remixsid='+remixsid;
http.CookieManager.AddCookie('remixchk='+remixchk+'; remixsid='+remixsid,'http://vk.com');
result:=TRUE;
end;
onfailed:result:=false;
oncaptcha:
begin
SHOWMESSAGE('CAPTCHA');//с капчой разберетесь сами ^_^
end;

end;
end;
Кольша вне форума Ответить с цитированием
Старый 01.11.2012, 23:45   #12
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

+1 спасибо будем разбираться
unbanned вне форума Ответить с цитированием
Старый 02.11.2012, 01:56   #13
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

что-то как то... не пойму я. вроде написано что onLoginDone... а пытаешься загрузить страницу с почтой например (al_im.php) возвращает
Цитата:
<script type="text/javascript">
var _ua = navigator.userAgent;
var locDomain = 'vk.com'.match(/[a-zA-Z]+\.[a-zA-Z]+\.?$/)[0];
if (/opera/i.test(_ua) || !/msie 6/i.test(_ua) || document.domain != locDomain) {
document.domain = locDomain;
}
parent.__qlClear();
parent.onLoginDone('/id0');
</script>
и редирект на страницу с формой авторизации


и если возникнет вопрос.... практически ваша функция
Код:
function TForm1.auth(l, p: string): BOOLEAN;
var
  data:tstringlist;
  PageProfile,sid:string;
  i: Integer;
  s, c, remixsid: string;
  host:TIdUri;
begin
  host:=tiduri.Create('http://vk.com');
  http:=tidhttp.Create();
  HTTP.AllowCookies:=true;
  HTTP.HandleRedirects:=false;
  data:=tstringlist.create;
data.Add('act=login');
data.Add('q=1');
data.Add('al_frame=1');
data.Add('expire=');

data.Add('from_host=vkontakte.ru');
data.Add('email='+l);
data.Add('pass='+p);

try
PageProfile:=HTTP.Post('http://login.vk.com/?act=login', data);
except
PageProfile:=http.Get(http.Response.Location);
end;
c := http.Response.RawHeaders.Text;
while (pos('sid=deleted; expires=',c)>0) do
delete(c,pos('sid=deleted; expires=',c),length('sid=deleted; expires=')+length('GMT; path=/; domain=.vk.com'));
i := Pos('remixsid', c) + 9;
remixsid := Copy(c, i, length(c));
remixsid := Copy(remixsid, 1, pos(';',remixsid)-1);
http.Request.CustomHeaders.Text := 'Cookie: remixsid='+remixsid;
http.CookieManager.AddserverCookie('remixsid='+remixsid, host);
result:=TRUE;
try
   PageProfile:=http.Get('http://vk.com/al_im.php');
  except

    end;
end;

Последний раз редактировалось unbanned; 02.11.2012 в 02:02.
unbanned вне форума Ответить с цитированием
Старый 02.11.2012, 09:08   #14
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

http.CookieManager.AddCookie('remix chk='+remixchk+'; remixsid='+remixsid,'http://vk.com');
Может так не?
Кольша вне форума Ответить с цитированием
Старый 02.11.2012, 11:48   #15
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от unbanned Посмотреть сообщение
вконтакте опять сменили авторизацию... более того авторизация через метод Get больше не работает.
С гетом всё нормально

Ставим Indy 10
Кидаем idhttp
Ставим HandleRedirects в True;
Делаем idHTTP1.Get('http://login.vk.com/?act=login&email=мыло&pass=пароль')
Идём пить чай
eoln вне форума Ответить с цитированием
Старый 02.11.2012, 12:08   #16
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

unbanned, а какая у вас версия indy? Если выше чем у делфи 7 то у вас этот код работать не будет 100% там надо делать как сказал eoln и еще также ловить куки..
Кольша вне форума Ответить с цитированием
Старый 02.11.2012, 14:30   #17
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

эмм.. это Delphi XE

Цитата:
http.CookieManager.AddCookie('remix chk='+remixchk+'; remixsid='+remixsid,'http://vk.com');
Может так не?
не. т.к. чему у вас равна remixchk ? она все равно пустая судя по вашей функции и в куках её тоже нет в приницпе

Последний раз редактировалось unbanned; 02.11.2012 в 14:34.
unbanned вне форума Ответить с цитированием
Старый 02.11.2012, 18:39   #18
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Delphi XE? Не будет работать,но запрос лучше посылать на тот же адрес...
Кольша вне форума Ответить с цитированием
Старый 03.11.2012, 12:56   #19
unbanned
Форумчанин
 
Аватар для unbanned
 
Регистрация: 23.11.2010
Сообщений: 530
По умолчанию

я вот что не пойму... каким образом связана версия (Indy, Delphi) и работоспособность кода или это связано с особенностями компонента?
unbanned вне форума Ответить с цитированием
Старый 03.11.2012, 13:08   #20
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Незнаю я пробовал инди обновлять...и все мои сетевые программы работали неправильно..пришлось удалять делфи и ставить по новой...
Кольша вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц