[Delphi] Редирект

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Stis-mag, 17 Jan 2011.

  1. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Исключение необходимо перехватывать в секции Except-End. То, что находится в Finally-End выполняется вне зависимости от того, вызовет код после Try исключение или нет.
    Не проверял, но должно работать:
    Code:
    procedure TForm1.btn27Click(Sender: TObject);
    var
      HTTP: TIdHTTP;
    begin
      tmr3.Enabled:=True;
      HTTP := TIdHTTP.Create(nil);
      HTTP.HandleRedirects := False;
      try
        HTTP.GET('http://site.ru');
      except
        if (Length(HTTP.Response.Location) > 0) and (HTTP.ResponseCode = 302) then
    
        ShowMessage('Redirect: ' + HTTP.Response.Location)
    
        else
           PlaySound('open.wav', 0, SND_ASYNC);
           tmr3.Enabled:=False;
        end;
        HTTP.Free;
    end;
    
     
  2. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Rastamanka вместо finally напиши except

    лол :D
    сомнительный совет - зачем отключать всё, так можно и необходимое для обработки исключение пропустить типа деления на нуль. лучше уж добавить это конкретное исключение в список игнорируемых в настройках отладчика.

    PS может мне кто объяснить чего вас всех так тянет в сеть даже без знания того что такое отладчик, исключения и т.п. :confused:
     
  3. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    Ну вот ты и объясняй ему теперь, что такое отладчик и как добавить исключение в игнор (но перед этим не забудь объяснить что такое исключение и как оно может быть вызвано) :D
     
  4. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    если последовать этому совету то все тоже будет не очень то гладко, по скольку HTTP.Free сработает только, если будет вызвано исключение ;) потому я и вынес его за пределы Try-Except :)
     
  5. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    Ну извините, нянькой не работаю. Если надо - нагуглит, или догадается потыкаться в меню ;)
    А вот что теперь сообщения обо всех исключениях не будут выводится - это действительно поле усеянное граблями.
    есчесно в код даже толком не смотрел, и не видел что там идет создание/удаление, зато увидел что есть finally и нету except и написал

    Раз уж пошла такая пьянка то по-хорошему там должны быть оба этих блока ;)
     
  6. greki_hoy

    greki_hoy Member

    Joined:
    4 Mar 2010
    Messages:
    326
    Likes Received:
    57
    Reputations:
    41
    с исключениями и без механизма для автоматического вызова
    деструкторов при исключении тяжко наверно ?
     
    #26 greki_hoy, 20 Apr 2011
    Last edited: 20 Apr 2011
  7. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    мне уже нет, т.к. дельфи встречаю только тут :)

    ну а вообще да - чтобы и освободить ресурсы и обработать исключения типа такого надо каждый раз писать:
    try
    try
    // some code
    except
    //
    end;
    finally
    //
    end;
     
  8. Rastamanka

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

    Joined:
    26 Nov 2008
    Messages:
    429
    Likes Received:
    11
    Reputations:
    7
    Попробовала изменить код на ваш. В итоге else не выполняется ))
    Программа просто подвисает на некоторое время и никакого эффекта. Думала из-за звука решила добавить ShowMessage туда и ничего не выводиться хотя на сайте редиректа нет на данный момент )
     
  9. patcher

    patcher Banned

    Joined:
    15 Dec 2009
    Messages:
    190
    Likes Received:
    37
    Reputations:
    10
    почитай о конструкциях try-except, try-finally. ссылку давал выше ;) как было выше сказано правильно было бы использовать обе эти конструкции, перейдя по ссылке можно найти пример использования этих конструкций вместе, да и вроде тут кто-то показывал пример :)