Delphi Проблема состоит в том, что после успешной авторизации не получается вывести исходный код страницы. При get запросе заместо кода страницы /profile.php выводится исходный код страницы авторизации. Сам код Code: procedure TForm1.Button1Click(Sender: TObject); var data:tstringlist; PageProfile:string; error:boolean; begin IdHTTP1.AllowCookies:=true; IdHTTP1.HandleRedirects:=false; data:=tstringlist.create; data.Add('act=login'); data.Add('expire=1'); data.Add('vk='); data.Add('email='+ edit1.Text); data.Add('pass='+ edit2.Text); data.Add('success_url=http://vkontakte.ru/share.php?act=logged'); error:=false; try PageProfile:=IdHTTP1.Post('http://login.vk.com/', data); except error:=true; end; if not(error) then begin data.Clear; data.Add('s='+Copy(PageProfile, Pos('value', PageProfile)+7, 56)); data.Add('op=slogin'); data.Add('redirect=1'); data.Add('expire=1'); data.Add('to='); IdHTTP1.HandleRedirects:=true; try IdHTTP1.Post('http://vkontakte.ru/share.php?act=logged', data); except end; PageProfile:=IdHTTP1.get('http://vkontakte.ru/profile.php'); Memo1.Lines.Add('Авторизация удалась'); Memo2.Text:= PageProfile; end else Memo1.Lines.Add('Авторизация не удалась'); Data.Free; end;
Ну значит не такая уж она и успешная, авторизация твоя) Возьми снифер и посмотри какие запросы и куда идут при авторизации
Code: IdHTTP1.AllowCookies:=true; data:=tstringlist.create; data.Add('email='+Edit1.Text); // логин для авторизации data.Add('pass='+Edit2.Text); // пароль для авторизации data.Add('expire='); data.Add('vk='); error:=false; try PageProfile:=IdHTTP1.Post('http://login.vk.com/?act=login', data); except error:=true; end; if not(error) then begin data.Clear; data.Add('s='+Copy(PageProfile, Pos('value', PageProfile)+7, 56)); data.Add('op=slogin'); data.Add('redirect=1'); data.Add('expire=0'); data.Add('to='); IdHTTP1.HandleRedirects:=true; try PageProfile:=IdHTTP1.Post('http://vkontakte.ru/login.php', data); except error:=true; end; if not(error) and (Pos('logout', PageProfile)<>0) then Memo1.Lines.Add('Авторизация удалась'); end;
Не надо играться с редиректом всегда в true поставь. Посмотри снифиром, что там не так после какого запроса? Может куки не те, вывиди их куда нить, их длина 56 я с мобилы так, что пока хз что еще сказать))) вообще рядом я создавал тему недавно) забыл всего 1 параметр)) http := idhttt.create(nil); и всего делов то было...
Надо "играться с редиректом". Его отключение позволяет существенно сэкономить на загрузке страницы, а соответственно и на времени (если текст страницы не нужен). Например, чтобы просто определить, произошел ли логин, текст страницы не нужен. Это можно посмотреть по заголовку
Поторопился я с закрытием вопроса. Возникла такая проблема. Авторизация проходит до конца, но при следующем get запросе открывается страница login.php
да передаю. Куки не причём тут, т.к. даже при редиректе после авторизации получаетсяся так, как будто авторизация не прошла
Code: var data:tstringlist; PageProfile:string; error:boolean; begin IdHTTP1.AllowCookies:=true; IdHTTP1.HandleRedirects:=false; data:=tstringlist.create; data.Add('email='+edit1.Text); data.Add('pass='+edit2.text); data.Add('expire='); data.Add('vk='); error:=false; try PageProfile:=IdHTTP1.Post('http://login.vk.com/?act=login', data); except error:=true; end; if not(error) then begin data.Clear; data.Add('s='+Copy(PageProfile, Pos('value', PageProfile)+7, 56)); data.Add('op=slogin'); data.Add('redirect=1'); data.Add('expire=0'); data.Add('to='); IdHTTP1.HandleRedirects:=true; try PageProfile:=IdHTTP1.Post('http://vkontakte.ru/login.php', data); except end; Memo1.Lines.Add('ok'); end else Memo1.Lines.Add('no'); Data.Free; end;
авторизация в вк: http://vkontakte.ru/login.php?op=a_login_attempt тут проверяем есть капча или нет. если есть if (page.Pos("captcha_sid")) то дергаем и разгадываем ее. если нет капчи if (page.Pos("vklogin")) то передаем логин и пароль: String page=htpp->Get("http://login.vk.com/?act=login&email=блабла&pass=йцуйцу&expire=&vk="); в page будут куки(value=). парсим, кладем :http->Request->CustomHeaders->Add("Cookie: remixsid="+sid); String profile_page=http->Get("http://vkontakte.ru/profile.php");
Скиньте тогда кто-нибудь 100% проверенные исходники авторизации. Удостовериться хочу, что сам где-то накосячил)