Конференция "Сети" » Обработка исключительных ситуаций indy в потоке [D7]
 
  • Vatokat (28.01.10 23:55) [0]
    Добавил в свою программу потоки и вознакла следующая проблема:
    В потоке создаю IdHTTP и отправляю POST запрос к url, но дело в том, что на указаном сайте 302 редирект, я отлавливаю это, получаю куда редиректит и делаю запрос снова, без потоков всё было как надо, но после добавления исключительная ситуация на редирект почему-то не обрабатывается и вознакает сообщение редиректе, после этого поток убивается.

    Вот кусок кода

    IdHTTP1.Post('http://myurl.ru/', LogInfo);
    except on e : EIdHTTPProtocolException do
      Begin
        if e.ErrorCode = 302 then
          begin
             twourl:=idhttp1.Response.Location;
             try
              IdHTTP1.Get(twourl);
             except
               on g : EIDHttpProtocolException do
               Begin
                 if g.ErrorCode = 302 then
                 begin
                   threeurl:=URLDecode(IdHTTP1.Response.Location);
                 end;
               End;
               on EIdException do;
             end;

          end else Synchronize(SetProgress);
      end;



    Почему может не обрабатываться исключительная ситуация?
  • Anatoly Podgoretsky © (29.01.10 00:34) [1]
    > Vatokat  (28.01.2010 23:55:00)  [0]

    Потому что исключения нет.
  • Vatokat (29.01.10 00:53) [2]
    Я уже думал об этом, потому что другие исключения нормально работают.
    А как сделать что бы было?
  • Медвежонок Пятачок © (29.01.10 10:11) [3]
    а что мешает разрешить редиректы и получить нужный респонс одним вызовом гет?
  • Vatokat (29.01.10 17:14) [4]
    Там 2 редиректа и даже если менять post запрос на get на событие onredirect, то срабатывает не корректно.
  • DVM © (29.01.10 18:59) [5]

    > Vatokat   (28.01.10 23:55) 

    на мой взгляд правильно делать так: получил редирект - делай новый поток, старый умирает самопроизвольно и все сначала и так далее хоть 1000 редиректов.
  • Vatokat (29.01.10 19:06) [6]

    > DVM

    Видимо прийдётся делать как то так, только почему всё таки внутри потока не срабатывает исключение?
  • Медвежонок Пятачок © (29.01.10 19:21) [7]
    Там 2 редиректа

    хоть три. в чем проблема-то?
  • Медвежонок Пятачок © (29.01.10 19:26) [8]
    тем более, что код возврата доступен, адрес редиректа доступен.
    накой тебе исключение для того, что бы извлечь эти данные и понять, что нажо делать редирект? (если уж ты решил самостоятельно  обрабатывать редирект)
  • Vatokat (29.01.10 20:22) [9]
    Сделал через получение данных в onredirect, всё ок, всем спасибо.
    Если кому-то надо будет, то не забывайте, что после редиректа indy обращается к странице таким же методом, как и было указанно в начале. По этому устанавливаем VMethod на онредирект на нужный метод.
 
Конференция "Сети" » Обработка исключительных ситуаций indy в потоке [D7]
Есть новые Нет новых   [134437   +30][b:0][p:0.001]