¿Hay alguna manera de establecer el tiempo de espera de respuesta para Indy Tidhttp?
He creado una aplicación de monitoreo de sitios web simple usando el componente Indy TIdhttp. Quiero detectar cuando una página designada no se devuelve dentro de un período de tiempo especificado (estoy usando 5000 milisegundos). Como prueba, creé una página en un sitio web que intencionalmente tarda 15 segundos en responder. Pero no puedo hacer que mi procedimiento "se rinda" después de los 5 segundos. Yo he tratadoReadTimeout, unasolución sugerida usando un temporizador y elOnWorkBegin evento (nunca pudo obtenerOnWorkBegin disparar inmediatamente después de recibir la llamada).
Nota No estoy preocupado por un tiempo de espera de conexión. Mi preocupación aquí es un tiempo de espera para que el servidor regrese con una página.
Aquí hay un código fuente que he estado usando. Contiene muchos de los elementos a los que me refiero.
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;