我正在编写一个程序,以检查网站的状态,例如200 OK。我在使用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
变量在线程构造函数中设置,status
变量是整个线程的变量。这段代码中的try和except部分来自Remy Lebeau - TeamB 这里,这是我最初尝试这个想法时提出的问题。我的问题在于,只有当网站返回200 OK代码时,此代码才能正常工作。任何其他情况都会引发异常,包括我禁用互联网时也会引发异常。这还会导致重定向的网站引发异常,例如www.google.com在调试期间会引发异常,我猜测这是因为它正在将我重定向到www.google.co.uk,但是如果我继续通过异常,那么它将返回301 FOUND代码而没有任何问题。
我要找到的最终结果是根据网站是否在线或出现错误(例如HTML返回代码)给我返回,同时在网站不存在(例如未注册的URL)或无法联系时提供反馈。
我要寻求的其他建议是如何从请求中获取更多信息。具体来说,目前我还想获得已检查网站的IP。
此外,让它在不需要在任何URL之前添加http://的情况下工作也很好,因此例如www.google.com将起作用,目前由于未知协议而无法使用。
基本上,如果有人提供IndyHTTP的一些好文档链接,那将是很棒的,因为它似乎很稀少。