gpt4 book ai didi

delphi - 如何使用 IdHTTP 检查 URL?

转载 作者:行者123 更新时间:2023-12-03 14:39:15 25 4
gpt4 key购买 nike

如何检查特定响应代码(例如 200 OK)的目标 URL,而 Indy 不会抛出各种异常。连接超时、连接正常关闭等...

例如,如果 URL 不正确或者找不到或无法访问其主机。即使我试图忽略它们,Indy 仍然会出现异常。

所以我的问题是如何正确忽略这些异常。

最佳答案

1。如何忽略 TIdHTTP 抛出的所有异常?

要处理所有异常,并且如您所说,忽略它们,您可以使用与 @Stijn 的答案中的代码几乎相同的代码:

procedure TForm1.Button1Click(Sender: TObject);
var
IdHTTP: TIdHTTP;
begin
IdHTTP := TIdHTTP.Create;
try
try
IdHTTP.Get('http://www.example.com');
except
// do just nothing here, if you really want to completely ignore all
// exceptions thrown from inside the try..except block execution and
// if you don't want to indicate somehow, that the exception occured
end;
finally
IdHTTP.Free;
end;
end;

2。如何处理 TIdHTTP 抛出的特定异常?

也许有一天,您会想要对 TIdHTTP 引发的某些类型的异常做出某种 react 。类,例如仅对 HTTP 协议(protocol)异常使用react。这就是我将在这里尝试详细阐述的内容。

Indy 为不同的场合定义了许多异常类,当某个操作失败时可能会发生这些异常类。以下是您在使用 HTTP 协议(protocol)时可能会感兴趣的异常类列表:

  1. EIdException - 它是 Indy 库使用的基本异常类。当您想要区分 Indy 引发的异常和应用程序引发的所有其他异常时,它可能对您有用。

  2. EIdSocketError - 从HTTP协议(protocol)抽象的角度来看,它是一个低级异常类,它涵盖了某个套接字操作失败时引发的所有异常。这对于您检测网络级别是否存在问题非常有用。

  3. EIdConnClosedGracefully - 此类引发的异常表明服务器端以常见方式关闭了与客户端的连接。当您需要对这种情况使用react时,这会很有用,例如通过重新连接到服务器。

  4. EIdHTTPProtocolException - 此异常类用于在处理特定请求的 HTTP 响应期间发生错误时引发的异常。当从 HTTP 响应接收到意外的数字 HTTP 响应代码时,通常会发生这种情况。当您想要专门处理 HTTP 协议(protocol)错误时,它会很有用。通过这种异常处理,您可以例如:对服务器响应返回的某些 HTTP 状态代码使用react。

下面是显示处理上面列出的异常的代码框架。当然,你不必显示消息,而是做一些更有用的事情。而且,您不需要处理所有这些;哪些异常(exception)以及如何处理取决于您:

uses
IdHTTP, IdException, IdStack;

procedure TForm1.Button1Click(Sender: TObject);
var
IdHTTP: TIdHTTP;
begin
IdHTTP := TIdHTTP.Create;
try
try
IdHTTP.Get('http://www.example.com');
except
// this exception class covers the HTTP protocol errors; you may read the
// response code using ErrorCode property of the exception object, or the
// same you can read from the ResponseCode property of the TIdHTTP object
on E: EIdHTTPProtocolException do
ShowMessage('Indy raised a protocol error!' + sLineBreak +
'HTTP status code: ' + IntToStr(E.ErrorCode) + sLineBreak +
'Error message' + E.Message);
// this exception class covers the cases when the server side closes the
// connection with a client in a "peaceful" way
on E: EIdConnClosedGracefully do
ShowMessage('Indy reports, that connection was closed gracefully!');
// this exception class covers all the low level socket exceptions
on E: EIdSocketError do
ShowMessage('Indy raised a socket error!' + sLineBreak +
'Error code: ' + IntToStr(E.LastError) + sLineBreak +
'Error message' + E.Message);
// this exception class covers all exceptions thrown by Indy library
on E: EIdException do
ShowMessage('Indy raised an exception!' + sLineBreak +
'Exception class: ' + E.ClassName + sLineBreak +
'Error message: ' + E.Message);
// this exception class is a base Delphi exception class and covers here
// all exceptions different from those listed above
on E: Exception do
ShowMessage('A non-Indy related exception has been raised!');
end;
finally
IdHTTP.Free;
end;
end;

关于delphi - 如何使用 IdHTTP 检查 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950676/

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