Delphi XE4-函数中包含IdHTTP的异常

Delphi XE4-函数中包含IdHTTP的异常,delphi,Delphi,这里有些东西不正常,我想知道是否有人能看到下面代码中的错误 function CheckUrl(url: String): Boolean; var sResp: String; begin Result := False; try sResp := IdHTTP1.Get(url); except on E: EIdHTTPProtocolException do Result := False; on E: EIdConnClosedGra

这里有些东西不正常,我想知道是否有人能看到下面代码中的错误

function CheckUrl(url: String): Boolean;
var
  sResp: String;
begin
  Result := False;      
  try
    sResp := IdHTTP1.Get(url);
  except
    on E: EIdHTTPProtocolException do Result := False;
    on E: EIdConnClosedGracefully do Result := False;
    on E: EIdSocketError do Result := False;
    on E: EIdException do Result := False;
    on E: Exception do Result := False;
  end;
  if IdHTTP1.ResponseCode = 200 then Result := True;
end;
我在主窗体的OnShow事件中使用此函数:

procedure TForm1.FormShow(Sender: TObject);
var
  urlOk: boolean;
begin
  //code1
  if not CheckURL(Url) then 
    begin
      //code2
    end;
  //some code here
end;
当internet连接不可用时会出现问题。即使我在CheckUrl函数中使用了try-except方法,并处理了所有异常,但如果发生异常且未执行代码2,CheckUrl函数也不会返回False。
也许有人会发现错误,给我指出正确的方向。谢谢

您可以将功能大大简化为以下内容:

function CheckUrl(url: String): Boolean;
begin
  try
    // using AResponseContent=nil to discard any data received so as not to waste any memory storing it temporarily...
    IdHTTP1.Get(url, TStream(nil));
    Result := True;
  except
    Result := False;
  end;
end;
或者:

function CheckUrl(url: String): Boolean;
begin
  try
    IdHTTP1.Head(url);
    Result := True;
  except
    Result := False;
  end;
end;

如果仍然无法返回预期结果,则说明您的项目或IDE安装存在严重问题。

您可以将功能简化为以下内容:

function CheckUrl(url: String): Boolean;
begin
  try
    // using AResponseContent=nil to discard any data received so as not to waste any memory storing it temporarily...
    IdHTTP1.Get(url, TStream(nil));
    Result := True;
  except
    Result := False;
  end;
end;
或者:

function CheckUrl(url: String): Boolean;
begin
  try
    IdHTTP1.Head(url);
    Result := True;
  except
    Result := False;
  end;
end;

如果仍然没有返回预期结果,那么您的项目或IDE安装有严重问题。

是否尝试将If语句移动到Try..Except块中?E:Exception do result:=False上的
以外的子句没有用<代码>例外
涵盖了所有其他的例外。大卫:我已经尝试了所有5个例外,全部都在一起,只有例外,其他被视为个体,并且。。。没有区别。我没有收到de SocketError AV,但函数不返回任何值。。。安迪:我试过了,没有成功。这很奇怪,它不起作用,因为我使用try,但在许多地方和任何地方都是它应该起作用的。我不是说尝试和错误。我告诉您,
异常
案例涵盖了所有其他情况。可能的重复您是否尝试将If语句移动到Try..Except块中?E:Exception do Result:=False上的
以外的子句没有用<代码>例外
涵盖了所有其他的例外。大卫:我已经尝试了所有5个例外,全部都在一起,只有例外,其他被视为个体,并且。。。没有区别。我没有收到de SocketError AV,但函数不返回任何值。。。安迪:我试过了,没有成功。这很奇怪,它不起作用,因为我使用try,但在许多地方和任何地方都是它应该起作用的。我不是说尝试和错误。我告诉你,
例外情况
涵盖了所有其他情况。可能重复的