Есть ли способ установить время ожидания ответа для Indy Tidhttp gets?
Я построил простое приложение для мониторинга веб-сайтов, используя компонент Indy TIdhttp. Я хочу определить, когда назначенная страница не возвращается в течение указанного периода времени (я использую 5000 миллисекунд). В качестве теста я создал страницу на веб-сайте, которая намеренно занимает 15 секунд, чтобы ответить. Но я не могу заставить свою процедуру "сдаться" после 5 секунд. Я попробовал ReadTimeout , предлагаемое решение с использованием таймера и события OnWorkBegin (никогда не было возможность получить OnWorkBegin для запуска сразу после вызова get).
Примечание я не беспокоюсь о таймауте соединения. Меня беспокоит здесь тайм-аут для сервера, чтобы вернуться со страницей.
Вот некоторый исходный код, который я использую. Он содержит много элементов, на которые я ссылаюсь.
procedure TServLogic.WorkBegin(ASender: TObject; AWorkMode: TWorkMode; AWorkCountMax: Int64);
begin
GetTimer.Enabled := True;
end;
procedure TServLogic.WorkEnd(ASender: TObject; AWorkMode: TWorkMode);
begin
GetTimer.Enabled := False;
end;
procedure TServLogic.GetTimerTimer(Sender: TObject);
begin
idHttp.Disconnect(True);
end;
procedure TServLogic.CallHttp(mlink: String): String;
begin
result := '';
GetTimer := TTimer.create(nil);
GetTimer.OnTimer := GetTimerTimer;
GetTimer.Interval := 5000;
try
IdHTTP := TIdHTTP.create(nil);
idhttp.ReadTimeout := 5000;
IdHttp.OnWorkBegin := WorkBegin;
IdHttp.OnWorkEnd := WorkEnd;
try
result := idhttp.get(mLink);
except
on e:exception do begin
AppendToLog('Server did not respond withing 5 seconds');
end;
end;
finally
GetTimer.Free;
idhttp.free;
end;
end;