IdHTTP в delphi

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by bag, 18 Jan 2009.

  1. bag

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

    Joined:
    6 Mar 2008
    Messages:
    116
    Likes Received:
    48
    Reputations:
    0
    все привет, помогите сделать коннект к сайту по IdHTTP.
    у меня не получается
    делаю так:

    var
    i:integer;
    s:string;
    begin
    lData := TStringList.Create;
    http := TIdHTTP.Create(nil);
    HTTP.HandleRedirects := True;
    HTTP.ProtocolVersion := pv1_0;
    HTTP.ProtocolVersion := pv1_0;
    HTTP.Request.BasicAuthentication := True;

    lData.Clear;
    try
    for i:=0 to Memo2.Lines.Count - 1 do
    begin
    lData.Add(memo2.Lines.Strings);
    end;
    try
    HTTP.Post('http://vkontakte.ru', lData);//
    s := http.Get('http://vkontakte.ru');
    except
    end;
    memo1.Lines.Add(s);
    finally
    end;
    ldata.free;
    end;


    в мемо2:
    [email protected]
    pass=123123
    submit=.
     
  2. crystalbit

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

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    мне кажется надо куки включить, если не сработает, пробуй реферер добавить
    думаю еще, хорошо получать результат пост запроса, авось там ответ

    и по поводу оптимизации, не удержался:
    Code:
    for i:=0 to Memo2.Lines.Count - 1 do
    begin
    lData.Add(memo2.Lines.Strings[i]);
    end;
    
    можно заменить на
    Code:
    lData:=Memo2.Lines;
    
     
  3. bag

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

    Joined:
    6 Mar 2008
    Messages:
    116
    Likes Received:
    48
    Reputations:
    0
    спасибо за ответ!
    вот это
    Code:
    HTTP.Post('http://vkontakte.ru', lData);//
    s := http.Get('http://vkontakte.ru');
    заменить на

    Code:
    //HTTP.Post('http://vkontakte.ru', lData);//
    s := http.post('http://vkontakte.ru',ldata);
    верно?
     
  4. bag

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

    Joined:
    6 Mar 2008
    Messages:
    116
    Likes Received:
    48
    Reputations:
    0
    еще заметил что символ @ меняется на %40 при входе из браузера, а если из дельфи то не меняется, попробовал написать %40 вместо @, в результате получил %2540
     
  5. bag

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

    Joined:
    6 Mar 2008
    Messages:
    116
    Likes Received:
    48
    Reputations:
    0
    Мужики, по-любому кто-то с этим сталкивался, откликнитесь.
     
  6. crystalbit

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

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
    мне кажется обязательно нужно включить кукисы

    ставь на форму IdCookieManager [Indy Misc]
    и в свойстве CookieManager у IdHTTP укажи его
    также AllowCookies тру

    это необходимое условие) достаточное ли оно - хз)
    может еще че-то надо
     
  7. bag

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

    Joined:
    6 Mar 2008
    Messages:
    116
    Likes Received:
    48
    Reputations:
    0
    спасибо, но не помогает((
     
  8. crystalbit

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

    Joined:
    6 Jun 2008
    Messages:
    212
    Likes Received:
    88
    Reputations:
    8
  9. cylaaaan

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

    Joined:
    31 Aug 2006
    Messages:
    0
    Likes Received:
    44
    Reputations:
    8
    Выставляешь компонент IdCookieManager на форму.

    Code:
    var
    i:integer;
    s:string;
    site :string;
    begin
    site := 'http://vkontakte.ru';
    
    Cookie := TIdCookieManager.Create(nil);
    lData := TStringList.Create;
    http := TIdHTTP.Create(nil);
    
    HTTP.Cookiemanager := Cookie;
    HTTP.HandleRedirects := False;
    
    lData.Clear;
    try
    
    for i:=0 to Memo2.Lines.Count - 1 do
    begin
    lData.Add(memo2.Lines.Strings[i]);
    end;
    
    try
    HTTP.Post(site+'/login.php', lData);
    except
    end;
    
    try
    s := http.Get(site+HTTP.Response.Location);
    except
    end;
    
    memo1.Lines.Add(s);
    
    finally
    end;
    
    ldata.free;
    
    end;
    
    Не проверял, но кажется так
     
    1 person likes this.
  10. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Code:
    try
    HTTP.Post(site+'/login.php', lData);
    except
    end;
    
    try
    s := http.Get(site+HTTP.Response.Location);
    except
    end;
    Начинается(( очередной велосипед?, не легче ли просто разрешить редиректы и все.
     
  11. cylaaaan

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

    Joined:
    31 Aug 2006
    Messages:
    0
    Likes Received:
    44
    Reputations:
    8
    а может понадобится отложить куки для отправки сообщения ? )
     
  12. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    тогда можно обойтись и без куки мэнеджера, если на то пошло, а просто выдергивать куки из заголовка, и посылать их в следующем запросе...
     
  13. cylaaaan

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

    Joined:
    31 Aug 2006
    Messages:
    0
    Likes Received:
    44
    Reputations:
    8
    приведи пример, буду знать
     
  14. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    GooGLE и тогда ты точно будешь знать.
    А вообще покажу для примера:

    Code:
    Memo1.Text:=http.Response.RawHeaders.Text;
    И ты прикинь, у этого компонента еще много интересных функций...
    __________________
    (forum.devisible.ru - форум программистов, программы на заказ)
     
    #14 De-visible, 21 Jan 2009
    Last edited: 21 Jan 2009
  15. cylaaaan

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

    Joined:
    31 Aug 2006
    Messages:
    0
    Likes Received:
    44
    Reputations:
    8
    а, ты об этом, я это знал :p
     
  16. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Если бы знал не спрашивал бы...
    Хорош флудить, а то тему вынудишь снести...