Нужна помощь по delphi.

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by solo, 20 Apr 2011.

  1. solo

    solo New Member

    Joined:
    16 Apr 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Нужно пройти авторизацию на сайте http://vseti.by
    и в label 1 вывести Имя и фамилию
    Email и Пароль брать из Edit1 и Edit2

    прежде чем писать проверьте исправность кода
     
    #1 solo, 20 Apr 2011
    Last edited: 22 Apr 2011
  2. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    А в чем проблема собственно? Indy + HTTP Analyzer никто не отменял, не так ли? ;)

    З.Ы. Я думаю тут за вас никто и ничего не сделает, а ваше задание в принципе простое, если авторизация не замудрённая :D о потоках я думаю мы говорить не будем :eek: удачи в разработке :cool:
     
  3. solo

    solo New Member

    Joined:
    16 Apr 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Ну так может возьмётесь за это? Если это не для вас не составит труда.
    Я не спец в этом деле а лишь учусь. И авторизация нужна в качестве образца, что бы разобрать необходимые для этого компоненты и их приминение.

    Обновил первый пост кинул ссылку вконтакте. Если кто то решиться помочь пишите голоса переведу от туда.
     
  4. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Для этого есть намного более подробная документация и демки, а учиться по коду с форумов ой какое опасное дело :eek:

    да пошел ты =/
    очередной говнокодер, welcome
     
    #4 GhostOnline, 21 Apr 2011
    Last edited: 21 Apr 2011
  5. solo

    solo New Member

    Joined:
    16 Apr 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    в документации не не описан метод авторизации пролистал книги 3 нигде подобного не нашел.
    И тему я создал не для выслушавания критики, а для того что бы помощь какую нибудь получить! Не знаете как помочь не пишите тогда вообще, не нужно набивать себе посты.
     
  6. Hack_ERR++

    Hack_ERR++ Member

    Joined:
    13 Aug 2009
    Messages:
    41
    Likes Received:
    9
    Reputations:
    0
    Ну как простейший пример:

    Code:
    post:=tstringlist.create;
    post.add('act=login');//сюда добавляешь
    post.add('log='+login);//данные,
    post.add('password='+pass);//которые наснифал http analyzer'ом
    result:= idhttp1.post('http://site.com/login.php',post); //собсно post-запрос
    
    Из result (код страницы после авторизации) выдираешь то, что тебе необходимо, суешь туда, куда нужно. login и pass - переменный, содержащие логин и пароль

    p.s Пример произвольный, под каждый сайт надо подстраиваться отдельно
     
  7. dpe_x

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

    Joined:
    8 Sep 2010
    Messages:
    155
    Likes Received:
    35
    Reputations:
    14
    книги не листать надо а читать.
     
  8. solo

    solo New Member

    Joined:
    16 Apr 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    спс и на этом..
    Вот это "отдельное" меня и интересует.
    Каким образом можно определить все редиректы сайта и т.п..?
    пример как из result выдернуть необходимое можешь показать? к примеру ид или что нибудь такое.
     
  9. 090808

    090808 Member

    Joined:
    15 Mar 2009
    Messages:
    171
    Likes Received:
    46
    Reputations:
    10
    читай http://www.delphi.int.ru/articles/118/
     
  10. solo

    solo New Member

    Joined:
    16 Apr 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    спс. много интересного, но работы с result там не нашел..
     
    #10 solo, 21 Apr 2011
    Last edited: 21 Apr 2011
  11. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Посмотрел сайт. Ничего сложного вообще. Посылаешь POST запрос, если логин и пароль верный сервер возвращает "good[id]" (вместо [id] - ID пользователя). Далее просто остается этот самый ИД взять и перейти по ссылке vseti.by/id[id]. Имя и фамилию можно вытащить из заголовка страницы, тоесть парсить значение после "<title>ВСети|" до "</title>"
     
  12. FeRiuS

    FeRiuS Member

    Joined:
    26 Feb 2010
    Messages:
    130
    Likes Received:
    49
    Reputations:
    5
    Делаешь все, как расписали выше, но советую проверить на валидность перед вытаскиванием.
     
  13. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    В общем, вот накидал функцию, не проверял, но должна работать:
    Code:
    uses ..., IdCookieManager, IdBaseComponent, IdComponent, IdTCPConnection,  IdTCPClient, IdHTTP;
    ----------------------------------------------
    function GetNameVSetiBy(email, password:string):string;
    var http:TIdHTTP; cook:TIdCookieManager; s:TStringList; resp:string;
    begin
    http:=TIdHTTP.Create(nil);
    cook:=TIdCookieManager.Create(nil);
    http.CookieManager:=cook;
    http.HandleRedirects:=true;
    http.AllowCookies:=true;
    s:=TStringList.Create;
    s.Add('op=a_login_attempt');
    s.Add('email='+email);
    s.Add('pass='+password);
    s.Add('expire=0');
    result:='Error';
    try
    resp:=http.Post('http://vseti.by/login.php', s);
    if pos('good', resp)>0 then begin
    resp:=copy(resp, 5, length(resp)-4);
    resp:=UTF8ToAnsi(http.Get('http://vseti.by/id'+resp));
    delete(resp, 1, pos('<title>ВСети | ', resp)+length('<title>ВСети | ')-1);
    resp:=copy(resp, 1, pos('</title>', resp)-1);
    result:=resp;
    end;
    except
    end;
    http.Free;
    cook.Free;
    s.Free;
    end;
    
    В твоем случае
    использовать ее нужно так:
    Code:
    Label1.Caption:=GetNameVSetiBy(Edit1.Text, Edit2.Text);
    
    P.S. опять при копировании с Делфи кодировка сменилась, уже поправил ;)
     
    #13 patcher, 21 Apr 2011
    Last edited: 21 Apr 2011
    1 person likes this.
  14. solo

    solo New Member

    Joined:
    16 Apr 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    при запуске проекта и авторизации в Label 1 вместе с Именем выводит и весь html код тот что перед ним. также вместо русских букв вопросы.
    скрин http://www.easyfoto.ru/web20110421194334520.htm
    как это можно исправить?
     
    #14 solo, 21 Apr 2011
    Last edited: 21 Apr 2011
  15. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    попробуй поменять строку
    Code:
    resp:=UTF8ToAnsi(http.Get('http://vseti.by/id'+resp));
    
    на
    Code:
    resp:=http.Get('http://vseti.by/id'+resp);
    
    П.С. на какой Делфе сидишь?
     
  16. solo

    solo New Member

    Joined:
    16 Apr 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Уже разобрался. Проблему с кодом решил добавив строку:
    Code:
      resp:=copy(resp, 204, pos('<title>ВСети | ', resp)+150);
    А вопросы вылетали в delphi 9 версии. перейдя на delphi 7 всё стало на свои места.
     
  17. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Перейдя на 7 версию и ненужно менять смысл парсинга. просто с кодировкой получились траблы потому функция pos не работала так как надо было.
     
  18. solo

    solo New Member

    Joined:
    16 Apr 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    Что бы зайти на страницу другого пользователя также нужно использовать idHttp? как это будет выглядеть?
     
  19. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Code:
    IdHTTP1.Get('http://vseti.by/id'+'Айди пользователя');
    
     
    #19 patcher, 22 Apr 2011
    Last edited: 22 Apr 2011
  20. solo

    solo New Member

    Joined:
    16 Apr 2011
    Messages:
    27
    Likes Received:
    0
    Reputations:
    0
    спс. а ты по книгам дома учился или заканчивал какое учебное заведение?