Delphi中的TidHTTP如何进行错误处理以应对各种异常情况?

2026-04-10 02:231阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计623个文字,预计阅读时间需要3分钟。

Delphi中的TidHTTP如何进行错误处理以应对各种异常情况?

我正在编写一个程序来对网站进行状态检查和测试,例如检查200好的状态。我正在使用Delphi 2010附带的Indy HTTP执行此任务,并已经有相关代码。代码如下:

procedure TCheckSiteIndividual.Execute;var http: TIdHTTP;beginbegin http :=TIdHTTP.Create; try http.Get('http://example.com'); if http.ResponseCode=200 then ShowMessage('状态良好') else ShowMessage('状态不佳'); finally http.Free; end;end;

我正在编写一个程序来对网站进行检查以测试它们当前的状态,例如200好的.我正在使用Delphi 2010附带的Indy HTTP执行此任务并拥有当前代码.

procedure TCheckSiteIndividual.Execute; var http : TIdhttp; begin try try http := Tidhttp.create(nil); //Create indy http.Get(CSiteURL,nil); //Send Request To Check Site except on E: EIdHTTPProtocolException do status := http.ResponseText; // or: code := E.ErrorCode; end; status := http.ResponseText; //Return Status of Site synchronize(updateform); //Update data to form finally http.Free; end; end;

CSiteURL变量在线程构造函数中设置,状态变量是整个线程的变量.

尝试,除了这部分代码来自Remy Lebeau – TeamB here,这是我在最初摆弄这个想法时提出的一个问题.我遇到的问题是,此代码仅在站点返回200 OK代码时才有效.任何其他原因导致异常,包括我禁用互联网.这也会导致重定向的网站上的例外情况,例如www.google.com在调试期间导致异常我认为它会导致它重定向到www.google.co.uk,但是如果我继续通过异常,那么它将返回301 FOUND代码,没有任何问题.

最终的结果我正在寻找它,根据网站是否在线或有错误(例如HTML返回代码)给我一个返回,当网站不存在时另外提供反馈(例如,未注册的URL)或者只是无法联系.

我正在寻找的其他建议是如何从请求中获取更多信息.特别是目前我还希望得到被检查网站的IP.

让它工作而不需要在任何URL之前有http://也是很好的,所以例如www.google.com将会工作,因为它不是因为未知的协议.

基本上如果有人链接到IndyHTTP的一些很好的文档会很好,因为它看起来很稀疏,

是的,当然会引起异常.这就是Indy的工作原理,这就是为什么Remy建议你捕捉异常的原因.

你现在感到困惑的是,即使你有代码来捕获异常,Delphi调试器仍会拦截它们并暂停程序的执行以通知你发生了异常. I’ve written about that phenomenon before.

由于您在调试时显然对了解非状态200异常并不感兴趣 – 因为您的程序本身就是为了处理所有这些错误 – 您最好的选择可能是将EIdHTTPProtocolException添加到调试器的忽略异常列表中.最简单的方法是在下次调试器通知您时选择“忽略此异常类型”.

Delphi中的TidHTTP如何进行错误处理以应对各种异常情况?

本文共计623个文字,预计阅读时间需要3分钟。

Delphi中的TidHTTP如何进行错误处理以应对各种异常情况?

我正在编写一个程序来对网站进行状态检查和测试,例如检查200好的状态。我正在使用Delphi 2010附带的Indy HTTP执行此任务,并已经有相关代码。代码如下:

procedure TCheckSiteIndividual.Execute;var http: TIdHTTP;beginbegin http :=TIdHTTP.Create; try http.Get('http://example.com'); if http.ResponseCode=200 then ShowMessage('状态良好') else ShowMessage('状态不佳'); finally http.Free; end;end;

我正在编写一个程序来对网站进行检查以测试它们当前的状态,例如200好的.我正在使用Delphi 2010附带的Indy HTTP执行此任务并拥有当前代码.

procedure TCheckSiteIndividual.Execute; var http : TIdhttp; begin try try http := Tidhttp.create(nil); //Create indy http.Get(CSiteURL,nil); //Send Request To Check Site except on E: EIdHTTPProtocolException do status := http.ResponseText; // or: code := E.ErrorCode; end; status := http.ResponseText; //Return Status of Site synchronize(updateform); //Update data to form finally http.Free; end; end;

CSiteURL变量在线程构造函数中设置,状态变量是整个线程的变量.

尝试,除了这部分代码来自Remy Lebeau – TeamB here,这是我在最初摆弄这个想法时提出的一个问题.我遇到的问题是,此代码仅在站点返回200 OK代码时才有效.任何其他原因导致异常,包括我禁用互联网.这也会导致重定向的网站上的例外情况,例如www.google.com在调试期间导致异常我认为它会导致它重定向到www.google.co.uk,但是如果我继续通过异常,那么它将返回301 FOUND代码,没有任何问题.

最终的结果我正在寻找它,根据网站是否在线或有错误(例如HTML返回代码)给我一个返回,当网站不存在时另外提供反馈(例如,未注册的URL)或者只是无法联系.

我正在寻找的其他建议是如何从请求中获取更多信息.特别是目前我还希望得到被检查网站的IP.

让它工作而不需要在任何URL之前有http://也是很好的,所以例如www.google.com将会工作,因为它不是因为未知的协议.

基本上如果有人链接到IndyHTTP的一些很好的文档会很好,因为它看起来很稀疏,

是的,当然会引起异常.这就是Indy的工作原理,这就是为什么Remy建议你捕捉异常的原因.

你现在感到困惑的是,即使你有代码来捕获异常,Delphi调试器仍会拦截它们并暂停程序的执行以通知你发生了异常. I’ve written about that phenomenon before.

由于您在调试时显然对了解非状态200异常并不感兴趣 – 因为您的程序本身就是为了处理所有这些错误 – 您最好的选择可能是将EIdHTTPProtocolException添加到调试器的忽略异常列表中.最简单的方法是在下次调试器通知您时选择“忽略此异常类型”.

Delphi中的TidHTTP如何进行错误处理以应对各种异常情况?