-
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, то срабатывает не корректно.
-
> 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 на онредирект на нужный метод.