您好我是使用Delphi的新手,我正在尝试编写一个应用程序来检查网站是否已启动或是否存在任何问题。我正在使用Indy的IdHTT。问题是它会捕获任何协议错误,但不会发现套接字错误等问题。
procedure TWebSiteStatus.Button1Click(Sender: TObject);
var
http : TIdHTTP;
url : string;
code : integer;
begin
url := 'http://www.'+Edit1.Text;
http := TIdHTTP.Create(nil);
try
try
http.Head(url);
code := http.ResponseCode;
except
on E: EIdHTTPProtocolException do
code := http.ResponseCode;
end;
ShowMessage(IntToStr(code));
if code <> 200 then
begin
Edit2.Text:='Something is wrong with the website';
down;
end;
finally
http.Free();
end;
end;
我基本上试图抓住任何不是网站没问题的东西,所以我可以打电话给另一个会设置电子邮件告诉我该网站已关闭的表格。
更新:首先你是对的我确实错过了'然后'抱歉这是删除其他代码并且它被误删了。处理异常时我不知道具体到一般的谢谢。最后我确实在这里找到了我想要的代码
on E: EIdSocketError do
使用IdStack使用
答案 0 :(得分:5)
将代码更改为捕获所有异常,或者添加更具体的异常:
url := 'http://www.'+Edit1.Text;
http := TIdHTTP.Create(nil);
try
try
http.Head(url);
code := http.ResponseCode;
except
on E: EIdHTTPProtocolException do
begin
code := http.ResponseCode;
ShowMessage(IntToStr(code));
if code <> 200
begin
Edit2.Text:='Something is wrong with the website';
down;
end;
end;
// Other specific Indy (EId*) exceptions if wanted
on E: Exception do
begin
ShowMessage(E.Message);
end;
end; // Added missing end here.
finally
http.Free();
end;
请注意,如果您要处理多种异常类型,则从最具体到最不具体是非常重要的。换句话说,如果您首先放置较少的特定(更一般类型)异常,则会发生以下情况:
try
DoSomethingThatCanRaiseAnException();
except
on E: Exception do
ShowMessage('This one fires always (covers all exceptions)');
on E: EConvertError do
ShowMessage('This one will never happen - never gets this far');
end;
这个将正常工作,因为它更具体到不太具体。适当地,它会被逆转:
try
DoSomethingThatCanRaiseAnException();
except
on E: EConvertError do
ShowMessage('This one gets all EConvertError exceptions');
on E: Exception do
ShowMessage('This one catches all types except EConvertError');
end;