gpt4 book ai didi

delphi - TidHTTP 错误处理

转载 作者:行者123 更新时间:2023-12-03 15:24:23 40 4
gpt4 key购买 nike

我正在编写一个程序来检查网站以测试它们的当前状态,例如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变量在线程构造函数中设置,status变量是整个线程的变量。

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

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

我正在寻找的其他建议是如何从请求中获取更多信息。具体来说,目前我还想获取所检查网站的 IP。

如果它不需要在任何 URL 之前添加 http://就可以正常工作,那么例如 www.google.com 就可以正常工作,但目前由于协议(protocol)未知而无法正常工作。

基本上,如果有人能提供一些 IndyHTTP 不错文档的链接,那就太好了,因为它似乎很稀疏,

最佳答案

是的,这当然会导致异常。这就是 Indy 的工作原理,这就是为什么 Remy 建议您捕获异常。

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

由于您在调试时显然对了解非 status-200 异常不感兴趣 - 因为您的程序旨在自行处理所有这些错误 - 您最好的选择可能是添加 EIdHTTPProtocolException 到调试器的忽略异常列表。最简单的方法是在调试器下次通知您时选择“忽略此异常类型”。

关于delphi - TidHTTP 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5287313/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com