我使用Indy TIdhttp组件构建了一个简单的网站监控应用程序。我想检测何时在指定的时间范围内没有返回指定的页面(我使用5000毫秒)。作为测试,我在网站上创建了一个页面,故意需要15秒才能响应。但是我不能让我的程序在5秒后“放弃”。我尝试了 ReadTimeout ,使用计时器的suggested solution和 OnWorkBegin 事件(以后无法立即触发 OnWorkBegin 来电)。
注意我不担心连接超时。我担心的是服务器返回页面的超时时间。
以下是我一直使用的一些源代码。它包含我引用的许多元素。
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;
答案 0 :(得分:4)
这不能回答上面的特定问题,但是由于这是Google搜索“ indy http timeout”时会带您到的地方,因此我在这里将提及您可以设置以下属性:
TIdHTTP.ReadTimeout
TIdHTTP.ConnectTimeout
答案 1 :(得分:3)
我最终根据Rob Kennedy的评论得到了答案。我曾多次尝试与他联系并要求他做出“正式”答复,以便我可以给他投票。没听过回来