Delphi TIdHTTP异常处理

Delphi TIdHTTP异常处理,delphi,delphi-xe2,indy10,Delphi,Delphi Xe2,Indy10,我创建了一个自动连接到本地服务器并下载更新的程序,代码如下: // Connect to web server and download ToBeInstalled.ini Url := 'http://'+IPAdd+'/ToBeInstalled.ini'; MS := TMemoryStream.Create try try http.Get(url, MS); code := http.ResponseText; except on

我创建了一个自动连接到本地服务器并下载更新的程序,代码如下:

// Connect to web server and download ToBeInstalled.ini
Url := 'http://'+IPAdd+'/ToBeInstalled.ini';
MS := TMemoryStream.Create
  try
    try
      http.Get(url, MS);
      code := http.ResponseText;
    except
      on E: EIdHTTPProtocolException do
        code := http.ResponseCode; 
    end;
    MS.SaveToFile(UserPath + 'ToBeInstalled.ini');
  finally
    http.Free();
  end;
该程序在办公室中运行良好,但当用户在家时无法访问服务器或服务器不可用时,会出现get“socket error#10061”


我不知道如何捕获该异常,更糟糕的是,在显示错误消息后,程序会一起停止执行。您知道如何修复该错误吗。非常感谢。

您的异常处理程序只捕获了
EIdHTTPProtocolException
异常,但还有其他几种类型的exc也可以引发的异常,包括
EIdSocketError
。您需要相应地更新处理程序,或者让它捕获所有可能的异常,而不是查找特定类型。因为您说未捕获的异常导致整个应用程序失败(这意味着您需要处理比
TIdHTTP
更大的问题),您还应该更新代码以处理
TMemoryStream
引发的异常

试试这个:

// Connect to web server and download ToBeInstalled.ini
Url := 'http://'+IPAdd+'/ToBeInstalled.ini';
try
  MS := TMemoryStream.Create
  try
    http.Get(url, MS);
    code := http.ResponseText;
    MS.SaveToFile(UserPath + 'ToBeInstalled.ini');
  finally
    MS.Free;
  end;
except
  on E: EIdHTTPProtocolException do begin
    code := http.ResponseCode; 
  end;
  on E: Exception begin
    // do something else
  end;
end;

您的异常处理程序只捕获特定的
EIdHTTPProtocolException
异常,但也可以引发其他几种类型的异常,包括
EIdSocketError
。您需要相应地更新处理程序,或者让它捕获所有可能的异常,而不是查找特定类型的异常s、 既然你说一个未捕获的异常导致你的整个应用程序失败(这意味着你需要处理比
TIdHTTP
更大的问题),你也应该更新代码来处理
TMemoryStream
引发的异常

试试这个:

// Connect to web server and download ToBeInstalled.ini
Url := 'http://'+IPAdd+'/ToBeInstalled.ini';
try
  MS := TMemoryStream.Create
  try
    http.Get(url, MS);
    code := http.ResponseText;
    MS.SaveToFile(UserPath + 'ToBeInstalled.ini');
  finally
    MS.Free;
  end;
except
  on E: EIdHTTPProtocolException do begin
    code := http.ResponseCode; 
  end;
  on E: Exception begin
    // do something else
  end;
end;

成功了。非常感谢。更多关于
TIdHTTP
异常的信息,您可能会发现。[+1]成功了。非常感谢。更多关于
TIdHTTP
异常的信息,您可能会发现。[+1]如果只是将数据保存到文件中,则最好使用文件流。唯一的缺点是,如果请求失败,则必须处理0字节文件。如果只将数据保存到文件中,则最好使用文件流。唯一的缺点是,如果请求失败,则必须处理0字节文件。