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

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

  1. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    :D уже поздно.

    p.s.: не стоило цитировать :)
     
  2. AHTOLLlKA

    AHTOLLlKA Member

    Joined:
    1 Feb 2005
    Messages:
    225
    Likes Received:
    35
    Reputations:
    22
    отснифай то что шлет твоя программа..
    на семерке делфи + 9 инди было так что для кукисов домен идет с точкой впереди аля .vkontakte.ru

    попробуй после того как послал постом данные по авторизации выполнить это ниже



    мне так на рутрекере помогло

    //add
    исправил чуток код)) не все скопировал сначала)
     
    #22 AHTOLLlKA, 24 Sep 2010
    Last edited: 27 Sep 2010
  3. 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
        IdHTTP1.Post('http://vkontakte.ru/login.php', data);
        if IdHTTP1.ResponseCode=302 then
         PageProfile:=IdHTTP1.get('http://vkontakte.ru/');
       except
        error:=true;
       end;
       if not(error) and (Pos('logout', PageProfile)<>0) then
         Memo1.Lines.Add('Авторизация удалась');
     end; 
    
    100% работает
     
  4. _DemiX_

    _DemiX_ New Member

    Joined:
    25 May 2010
    Messages:
    51
    Likes Received:
    1
    Reputations:
    0
    Code:
    Data :=tstringlist.Create;
    Data.Add('email='+edit1.text;
    Data.Add('pass='+edit2.text);
    Uns := form1.idhttp1.Post('http://login.vk.com/?act=login', Data);
    Uns := Copy(uns, 351, 56);
    if pos ('ВКонтакте | Вход',uns)<>0 then
    Form1.Memo2.lines.add(Log+'No valid')
    else begin
    form1.idcookiemanager1.AddCookie('remixsid=' + Uns + '; path=/;', 'vkontakte.ru');
    form1.idcookiemanager1.AddCookie('remixchk=5; path=/;', 'vkontakte.ru');
    
    data.Free;
    Конечно idhttp связываешь с idcookiemanager
    Ханредикт (или как-то так) = true;
    data:tstringlist;

    Ну а дальше сами всё поймете
     
    #24 _DemiX_, 25 Sep 2010
    Last edited: 25 Sep 2010
  5. ilyhamas

    ilyhamas Banned

    Joined:
    25 Oct 2009
    Messages:
    48
    Likes Received:
    2
    Reputations:
    0
    Всем спасибо. Ответ в 25 посте.
     
  6. Linkus

    Linkus Member

    Joined:
    20 Dec 2008
    Messages:
    168
    Likes Received:
    15
    Reputations:
    -1

    у мну на c# такая же ерунда была) убрал точку- всё покатило
     
  7. AHTOLLlKA

    AHTOLLlKA Member

    Joined:
    1 Feb 2005
    Messages:
    225
    Likes Received:
    35
    Reputations:
    22
    и как ты точку убрал если там на домен присваиваются куки..
    код чтоле дай
     
  8. Hack_ERR++

    Hack_ERR++ Member

    Joined:
    13 Aug 2009
    Messages:
    41
    Likes Received:
    9
    Reputations:
    0
    Такая же хрень, вот код
    Code:
    var
    outfo:tstringlist;
    s,uns:string;
    begin
    outfo:=tstringlist.create;
    form1.idhttp1.get('http://vkontakte.ru/login.php?op=a_login_attempt');
    outfo.add('act=login');
    outfo.add('email='+form1.edit1.text);
    outfo.add('pass='+form1.Edit2.Text);
    try
    uns:=UTF8toANSI(form1.idhttp1.post('http://login.vk.com/', outfo));
    s:=copy(uns,286,56);
    form1.idcookiemanager1.addcookie('remixsid='+s+';path=/;','vkontakte.ru');
    finally
    if s <> '' then
    begin
    form1.label3.Caption:='Статус: подключились';
    s:=form1.IdHTTP1.Get('/feed.php');
    form1.Memo1.Lines.Add(s);
    end
    else
    form1.Label3.Caption:='Статус: ошибка';
    end;
    end;
    
    Авторизуется, но куки не ставятся, пробовал совет в посте #25 - не помогло.

    з.ы - раньше помню по этому коду все было норм(и авторизация и с куками проблем не было), мб контакт что-нибудь поменял?
     
  9. HakaR

    HakaR Active Member

    Joined:
    23 Jul 2009
    Messages:
    301
    Likes Received:
    200
    Reputations:
    3
    Hack_ERR++, попробуй так: // Сам не проверял, писал в блокноте по памяти :eek:
     
  10. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    Фиксим idCookieManager.pas :
    Code:
    procedure TIdCookieManager.DoAdd(ACookie: TIdCookieRFC2109; ACookieText, AHost: String);
    Var
      LDomain: String;
    begin
      ACookie.CookieText := ACookieText;
    
      if Length(ACookie.Domain) = 0 then LDomain := AHost
      else LDomain := ACookie.Domain;
    
      [COLOR=Green][B]if LDomain[1] = '.' then LDomain := Copy(LDomain, 2, Length(LDomain) - 1);[/B][/COLOR]
      ACookie.Domain := LDomain;
      
      if ACookie.IsValidCookie(AHost) then
      begin
        if DoOnNewCookie(ACookie) then
        begin
          FCookieCollection.AddCookie(ACookie);
        end
        else begin
          ACookie.Collection := nil;
          ACookie.Free;
        end;
      end
      else begin
        ACookie.Free;
      end;
    end;
    
    В авторизации ни чего не придумываем:
    Code:
     pd:=TStringList.Create;
     pd.Add('email='+login.Text);
     pd.Add('pass='+pass.Text);
     s:=http.Post('http://vkontakte.ru/login.php',pd);
    
    Indy 10.5.2 , усе работает на ура...


    Удачи.
     
  11. _DemiX_

    _DemiX_ New Member

    Joined:
    25 May 2010
    Messages:
    51
    Likes Received:
    1
    Reputations:
    0
    Code:
    log:=copy(Form1.smemo1.lines[i],1,pos(':',Form1.smemo1.lines[i])-1);
    pass:=copy(Form1.smemo1.lines[i],pos(':',Form1.smemo1.lines[i])+1,20);
    Data :=tstringlist.Create;
    Data.Add('email='+log);
    Data.Add('pass='+pass);
    Uns := Form1.idHTTP1.Post('http://login.vk.com/?act=login', Data);
    data.Free;
    Uns := Copy(uns, 351, 56);
    if pos ('Контакте | Вход',uns)<>0 then
    Form1.IdCookieManager1.AddCookie('remixsid=' + Uns + '; path=/;', 'vkontakte.ru');
    Form1.IdCookieManager1.AddCookie('remixchk=5; path=/;', 'vkontakte.ru');
    ХардРедик:=true;
    Кукиманаджер связываем с IDhttp...
    Ну соответственно указываем все переменные