我正在编写一个程序在网站上执行检查以测试它们是当前状态,例如, 200 OK。我使用Delphi 2010附带的Indy HTTP来执行此任务并获得当前代码。TidHTTP错误处理
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
变量被设置在螺纹构造,并且status
变量是整个主题的变量。
的尝试,除了这部分代码来自人头马勒博 - TeamB here这是我提出的问题时,最初这个想法摆弄周围。我遇到的问题是,该代码只适用于网站返回200 OK代码的情况。任何其他事情都会导致异常,包括如果我禁用互联网。这也会导致例如重定向的网站例外。 www.google.com会在调试过程中导致异常,我认为会导致它重定向到www.google.co.uk,但是如果我继续超出异常,那么它将返回301 FOUND代码而不会出现任何问题。
我正在寻找它的最终结果,以便根据网站是否在线或有错误(例如,HTML RETURN CODE)给我返回当网站不存在时额外提供反馈(例如非注册的网址)或只是无法联系。
我正在寻找的其他建议的忠告是如何从请求中获得更多信息。具体来说,我现在正在寻找也检查过的网站的IP。
如果不需要在任何URL之前加上http://,它也可以很好地工作,所以例如www.google.com将会工作,而目前它并不是因为未知的协议。
基本上这将是巨大的,如果有人有一个链接,为IndyHTTP一些不错的文档,因为它似乎是稀疏,
它看起来像你的状态分配后,异常处理程序是错位的......你也忽略@Remy建议使用头部方法,而不是整个只是了解服务器返回的状态。另外,你正在使用ResponseText来检查站点的* status *,注意INDY为你解析这个,并给你很好的ResponseCode整型属性来检查响应。最后,你说异常被提出,但你不会告诉我们哪个异常,所以通过阅读代码很难弄清楚发生了什么。 – jachguate 2011-03-14 17:02:04
@jachguate我现在已经更新了代码以反映.head方法。我已经改变了它,正在下载网站的页面,但已经搁置,刚才。异常处理程序以何种方式错位?另外,如果我更改为使用ResponseCode方法,则发生套接字错误时会发生什么情况,例如站点无法到达。例外beign的问题随着它们的剧烈变化而产生,其中一些是套接字错误,一些例外,例如返回。 HTTP/1的例外。1 302找到 – jskrwyk 2011-03-17 02:08:53
异常处理程序没有放错地方,你在异常处理程序后执行的状态分配对我来说是没有意义的。关于这里提出的各种例外......它不是太大......你可以通过检查得到更多有关各种失败原因的知识,而且你可以微调你的软件来相应地管理和报告,知识。 – jachguate 2011-03-18 17:15:32