Авторизация вконтакте

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ilyhamas, 24 Sep 2010.

  1. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    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;
    
     
  2. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Ну значит не такая уж она и успешная, авторизация твоя)
    Возьми снифер и посмотри какие запросы и куда идут при авторизации
     
  3. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    Пробовал уже 3 разные....Всё аналогично
     
  4. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Ты CookieManger хоть прицепил?
     
  5. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    да прикрепил
     
  6. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    Снифер что показывает? Авторизация происходит?
     
  7. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    Авторизация не доходит до конца. В этом то и вопрос.
     
  8. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    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;   
    
     
  9. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    Спасибо.
     
    #9 ilyhamas, 24 Sep 2010
    Last edited: 24 Sep 2010
  10. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    Не надо играться с редиректом всегда в true поставь. Посмотри снифиром, что там не так после какого запроса? Может куки не те, вывиди их куда нить, их длина 56 я с мобилы так, что пока хз что еще сказать))) вообще рядом я создавал тему недавно) забыл всего 1 параметр)) http := idhttt.create(nil); :) и всего делов то было...
     
  11. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    Надо "играться с редиректом". Его отключение позволяет существенно сэкономить на загрузке страницы, а соответственно и на времени (если текст страницы не нужен).
    Например, чтобы просто определить, произошел ли логин, текст страницы не нужен. Это можно посмотреть по заголовку
     
  12. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    в данном случает считаю стоит оставить true т.к. Контакт не предсказуем><
     
  13. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    Поторопился я с закрытием вопроса.
    Возникла такая проблема. Авторизация проходит до конца, но при следующем get запросе открывается страница login.php
     
  14. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    да передаю.
    Куки не причём тут, т.к. даже при редиректе после авторизации получаетсяся так, как будто авторизация не прошла
     
  15. ZdezBilYa

    ZdezBilYa Elder - Старейшина

    Joined:
    29 Aug 2008
    Messages:
    198
    Likes Received:
    75
    Reputations:
    19
    каком способом авторизуетесь?
     
  16. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    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;
     
  17. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    авторизация в вк:

    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");
     
  18. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    Совсем не в тему. Прочитайте всю тему, а не только первое сообщение
     
  19. _DemiX_

    _DemiX_ New Member

    Joined:
    25 May 2010
    Messages:
    51
    Likes Received:
    1
    Reputations:
    0
    Если ты несколько аков авторизовываешь, то
    idcookiemanager1.cookiecollection.clear;
    Как-то так..О_о
     
  20. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    Скиньте тогда кто-нибудь 100% проверенные исходники авторизации. Удостовериться хочу, что сам где-то накосячил)