Вконтакте - помогите получить хэш

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by lamer811, 7 Oct 2010.

  1. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    Вот код, которым пытаюсь выполнить поставленную задачу:


    Code:
    var
    hash : String;
    Data, findhash : TStringList;
    begin
    data:=tstringlist.create;
    findhash:=tstringlist.create;
    data.add('addMember=1');
    data.add('app_settings_1=1');
    Data.add('app_settings_2=1');
    data.add('app_settings_4=1');
    data.add('app_settings_8=1');
    data.add('app_settings_16=1');
    Data.add('app_settings_32=1');
    data.add('app_settings_64=1');
    Data.add('app_settings_128=1');
    data.add('app_settings_1024=1');
    data.add('app_settings_2048=1');
    data.add('app_settings_4096=1');
    data.add('app_settings_8192=1');
    findhash.text:=IdHTTP1.get('http://vkontakte.ru/login.php?app=1911836&layout=popup&type=browser&settings=15615');
    hash:=copy(findhash[168], 1,50);
    data.add(hash);
    data.add('id=1911836');
    
    Но в ответ пустота...
    Смотрел, там страничка пустая, т.е. как будто бы я не авторизовался...
    Но я действительно авторизовываюсь и могу парсить рейтинг и другие элементы страницы.

    Code:
      Data.Add('email='+Edit1.Text);   Data.Add('pass='+Edit2.Text);    Uns := HTTP.Post('http://login.vk.com/?act=login', Data);   Uns:=copy(uns, pos('<input type='#39'hidden'#39' name='#39's'#39' value='#39'', uns)+37,  56);
    ЯП: Delphi 7

    Помогите пожалуйста в этой задачке...
     
    #1 lamer811, 7 Oct 2010
    Last edited by a moderator: 7 Oct 2010
  2. xhugo

    xhugo New Member

    Joined:
    25 Aug 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Пробовал снифать? как отчеты?
     
  3. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    Я отправляю тоже самое
    Пробовал уже всё...

    И вот так делал:

    Code:
    auth.add('app=1911836');
    auth.add('layout= popup');
    auth.add('type browser');
    auth.add('settings=15615');
    findhash.text:=IdHTTP1.POST('http://vkontakte.ru/login.php?app=1911836&layout=popup&type=browser&settings=15615', auth);
    
     
  4. xhugo

    xhugo New Member

    Joined:
    25 Aug 2010
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Мне вообще пишет только Login success
     
  5. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    Значит ты уже нажимал (ранее) разрешить доступ для данного приложения

    P.S. Именно этого эффекта я и добиваюсь...
     
    #5 lamer811, 7 Oct 2010
    Last edited: 7 Oct 2010
  6. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    kosmo987 спасибо за инструкцию

    Только я гет сюда:
    уже делал... и в ответе app_hash пустой...

    P.S. Я думал это делается, намного проще
     
  7. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    kosmo987
    Ну я же привёл код
    По моему я там делаю описанные тобой действия, но get запрос мне ничего не возвращает

    Если сделать браузер на форме и дать пользователю самому разрешить все действия, то тогда всё норм.
     
  8. RedFern.89

    RedFern.89 Member

    Joined:
    20 Jan 2010
    Messages:
    575
    Likes Received:
    48
    Reputations:
    0
    #8 RedFern.89, 8 Oct 2010
    Last edited: 9 Oct 2010
    1 person likes this.
  9. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    kosmo987
    Да ты понял правильно, кстати и правда хэш не верно получал, не с той строчки вообще его брал. Исправил :)
    Теперь делаю по твоему алгоритму...

    RedFern.89 спасибо.
    Посмотрел сорцы, посмотрел авторизацию
    Но в том то и трабла, что ты авторизацию прошёл, а доступа к данным ты не имеешь, до тех пор, пока пользователь не нажмёт кнопочку разрешить по ссылке в первом посте (только с твоим id приложения)
     
  10. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    1)
    Code:
     log := http.get('http://vkontakte.ru/login.php?app=1931178&layout=popup&type=browser&settings=1026');
    
     data := TStringList.create;
     data.Add('act=login');
     data.Add('app=1931178');
     data.Add('app_hash='+Parse('app_hash = ''', log, ''''));
     data.Add('vk=');
     data.Add('captcha_sid=');
     data.Add('captcha_key=');
     data.Add('email='+email);
     data.Add('pass='+pass);
     data.Add('expire=0');
     data.Add('permanent=1'
    
    2)
    Code:
     try
      log:= http.post('http://login.vk.com/', data);
      data.clear;
      data.Add('s='+parse('value=''', log, ''''));
      data.Add('act=auth_result');
      data.Add('m=4');
      data.Add('permanent=1');
      data.Add('app=1931178');
      data.Add('app_hash='+Parse('app_hash" value="', log, '"'));
    
    3)
    Code:
    log := http.post('http://vkontakte.ru/login.php', data);
    
    4)
    Code:
    log := http.get('http://login.vk.com/?vk=')
    
    Если я верно понимаю, то мне осталось 2 шага до истины :)

    RedFern.89
    Тебе кстати, это тоже понадобится...
    Выводить окошко браузера для того чтобы пользователь разрешил доступ к данным: легко, но не красиво :(
     
  11. _DemiX_

    _DemiX_ New Member

    Joined:
    25 May 2010
    Messages:
    51
    Likes Received:
    1
    Reputations:
    0
    lamer881, ты на Delphi пишешь?
     
  12. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    _DemiX_
    Да, на нём самом (см. пост 1)
     
  13. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    Блин, всё таки это жесть полная :)
    Наверное, буду использовать браузер
     
  14. _DemiX_

    _DemiX_ New Member

    Joined:
    25 May 2010
    Messages:
    51
    Likes Received:
    1
    Reputations:
    0
    kosmo987
    Я так понимаю, многопоточность на сокетах очень трудная вещь?)
    Мне просто говорили про неё)
     
  15. dr.Web

    dr.Web Member

    Joined:
    2 Feb 2009
    Messages:
    7
    Likes Received:
    22
    Reputations:
    10
    lamer попробуй хэадеры добавь реферер и тп.
     
  16. Stis-mag

    Stis-mag New Member

    Joined:
    22 Nov 2010
    Messages:
    55
    Likes Received:
    0
    Reputations:
    0
    Можно по подробнее что надо парсить в i,p,s?
     
  17. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    lamer811, сделал или нет?
     
  18. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    Программно нажать так и не смог...
    Поэтому решил проблему другим путём, а именно вывожу в веб браузере окошко, в котором пользователь сам нажимает разрешить

    Естественно в это окошко я изначально передаю данные, которые пользователь указывал при авторизации в программе (мыло и пароль)
     
  19. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    282
    Reputations:
    2
    ты меня разочаровываешь :)

    авторизируешся и делаешь вот так:
    Code:
    var
    ca:tstringlist;
    cs,app_settings_hash:string;
    begin
     ca:=tstringlist.Create;
     try
      cs:=http.Get('http://vkontakte.ru/login.php?app=1911836&layout=popup&type=browser&settings=15615');
     except end;
     app_settings_hash:=copy(cs, pos('app_settings_hash = ''', cs)+21, 18);
     ca.Clear;
     ca.Add('addMember=1');
     ca.Add('app_settings_1=1');
     ca.Add('app_settings_2=1');
     ca.Add('app_settings_4=1');
     ca.Add('app_settings_8=1');
     ca.Add('app_settings_16=1');
     ca.Add('app_settings_32=1');
     ca.Add('app_settings_64=1');
     ca.Add('app_settings_128=1');
     ca.Add('app_settings_1024=1');
     ca.Add('app_settings_2048=1');
     ca.Add('app_settings_4096=1');
     ca.Add('app_settings_8192=1');
     ca.Add('hash='+app_settings_hash);
     ca.Add('id=1911836');
     try
      cs:=http.post('http://vkontakte.ru/apps.php?act=a_save_settings', ca);
     except end;
     while pos('captcha_sid', cs)<>0 do
      begin
    
        { тут разгадываем капчу }
    
        // потовряем запрос:
       ca.Clear;
       ca.Add('addMember=1');
       ca.Add('app_settings_1=1');
       ca.Add('app_settings_2=1');
       ca.Add('app_settings_4=1');
       ca.Add('app_settings_8=1');
       ca.Add('app_settings_16=1');
       ca.Add('app_settings_32=1');
       ca.Add('app_settings_64=1');
       ca.Add('app_settings_128=1');
       ca.Add('app_settings_1024=1');
       ca.Add('app_settings_2048=1');
       ca.Add('app_settings_4096=1');
       ca.Add('app_settings_8192=1');
       ca.Add('hash='+app_settings_hash);
       ca.Add('id=1911836');
       ca.Add('captcha_sid='+sid);
       ca.Add('captcha_key='+капча);
       try
        cs:=http.post('http://vkontakte.ru/apps.php?act=a_save_settings', ca);
       except end;
      end;
     /// проверяем, сработало-ли.
     try
      http.Get('http://vkontakte.ru/login.php?app=1911836&layout=popup&type=browser&settings=15615');
     except end;
      if pos('login_success', http.Response.Location)<>0 then
       showmessage('good job, bro!')
      else
       showmessage('hui.');
    ca.free;
    end;
    
    проверил, всё работает.
     
    #19 1n0y, 23 Nov 2010
    Last edited: 23 Nov 2010
    6 people like this.
  20. lamer811

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

    Joined:
    8 Nov 2009
    Messages:
    130
    Likes Received:
    39
    Reputations:
    12
    Блин у меня было почти тоже самое, когда я бросил это дело...
    Было пару косяков с параметрами, а всё не внимательность... :(ъ
    Спасибо! С меня +