Gibt es eine Möglichkeit, das Antwortzeitlimit für Indy Tidhttp festzulegen?
Ich habe eine einfache Website-Überwachungsanwendung mit der Indy TIdhttp-Komponente erstellt. Ich möchte erkennen, wenn eine bestimmte Seite nicht innerhalb eines bestimmten Zeitraums zurückgegeben wird (ich verwende 5000 Millisekunden). Als Test habe ich eine Seite auf einer Website erstellt, für deren Beantwortung absichtlich 15 Sekunden benötigt werden. Aber ich kann meine Prozedur nicht dazu bringen, nach den 5 Sekunden "aufzugeben". Ich habe versucht ReadTimeout, einvorgeschlagene Lösun mit einem Timer und dem OnWorkBegin event (konnte nie @ bekomm OnWorkBegin um sofort nach dem get call zu feuern.
Hinwei Ich mache mir keine Sorgen um eine Verbindungsunterbrechung. Mein Anliegen ist hier eine Zeitüberschreitung für den Server, um mit einer Seite zurückzukehren.
Hier ist ein Quellcode, den ich verwendet habe. Es enthält viele der Elemente, auf die ich verweise.
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;