- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何检查特定响应代码(例如 200 OK)的目标 URL,而 Indy 不会抛出各种异常。连接超时、连接正常关闭等...
例如,如果 URL 不正确或者找不到或无法访问其主机。即使我试图忽略它们,Indy 仍然会出现异常。
所以我的问题是如何正确忽略这些异常。
最佳答案
要处理所有异常,并且如您所说,忽略它们,您可以使用与 @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;
也许有一天,您会想要对 TIdHTTP
引发的某些类型的异常做出某种 react 。类,例如仅对 HTTP 协议(protocol)异常使用react。这就是我将在这里尝试详细阐述的内容。
Indy 为不同的场合定义了许多异常类,当某个操作失败时可能会发生这些异常类。以下是您在使用 HTTP 协议(protocol)时可能会感兴趣的异常类列表:
EIdException
- 它是 Indy 库使用的基本异常类。当您想要区分 Indy 引发的异常和应用程序引发的所有其他异常时,它可能对您有用。
EIdSocketError
- 从HTTP协议(protocol)抽象的角度来看,它是一个低级异常类,它涵盖了某个套接字操作失败时引发的所有异常。这对于您检测网络级别是否存在问题非常有用。
EIdConnClosedGracefully
- 此类引发的异常表明服务器端以常见方式关闭了与客户端的连接。当您需要对这种情况使用react时,这会很有用,例如通过重新连接到服务器。
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/
我正在准备申请。 IDHTTP:使用Get方法。但是有一些问题。我要创建一个代理列表,然后单击添加IDHTTP的列表框项(代理地址)。对不起,我不太会英语。 我的密码; procedure TForm
我正在尝试使用 Indy HTTP 类进行 HTTP 身份验证。但由于某种未知的原因,我在这一行中收到了访问冲突错误:IdHTTP1.Request.Authentication.Username :
我正在使用 idhttp (Indy) 进行一些网站检查。我想要它做的就是在发送请求后检查服务器的响应代码,我不想实际上必须从服务器接收 HTML 输出,因为我只监视 200 OK 代码,任何其他代码
请向我解释如何使用 SSL (https://) 从服务器下载文件。我在互联网上没有找到合适的答案。 每个人都在谈论 TIdSSLIOHandlerSocket,但我只有 TIdSSLIOHandle
请向我解释如何使用 SSL (https://) 从服务器下载文件。我在互联网上没有找到合适的答案。 每个人都在谈论 TIdSSLIOHandlerSocket,但我只有 TIdSSLIOHandle
我如何使用 IdHTTP 将消息作为 PostMan 发送如下: 我的第一次尝试如下: function TIdFoo.SendIM(const AID, AMessage: string): Boo
印地 10: 两个线程,线程 1 正在调用 TIdHTTP 上的 Get 并阻止读取数据。线程2将在同一个TIdHTTP上调用disconnect以中断Get。 我在 TIdHTTP 上使用摘要式身份
使用:Delphi 2010,最新版本的 Indy 我正在尝试从 Google Adsense 网页上抓取数据,目的是获取报告。然而到目前为止我还没有成功。它在第一个请求后停止并且不再继续。 使用 F
我使用 TIdHttp 来获取网页内容。响应头指示内容编码为utf8。我想在控制台中打印内容为CP936(简体中文),但实际内容不可读。 Result := TEncoding.Utf8.GetStr
一家公司要求我记录我们的客户端仅在软件级别通过 TCP 协议(protocol)与我们的服务器进行通信。我一直假设 IdHTTP 使用 TCP,但我不确定如何证明它。我在文档中找不到它。 最佳答案 T
我已指定 OnStatus 处理程序使用 AStatusText 参数更新标签。 在处理程序中设置断点时,它只会在我执行 Get("google.com") 时在 hsConnected 状态下中断。
像这样使用 TIdHttp 时: Memo1.Text := IdHTTP1.post(url,data); 如果 memo1 没有给出 http 错误,我可以获得响应内容。但是当它给出 http 错
好的,我已经动态创建了 Idhttp,如下所示 procedure TForm1.Button1Click(Sender: TObject); Var Resp : String; begin
我发现,当为 TIdHTTP 组件设置 ConnectTimeoout 属性时,它会使请求(GET 和 POST)变慢约 120 毫秒? 这是为什么,我可以以某种方式避免/绕过它吗? Env:D201
如何检查特定响应代码(例如 200 OK)的目标 URL,而 Indy 不会抛出各种异常。连接超时、连接正常关闭等... 例如,如果 URL 不正确或者找不到或无法访问其主机。即使我试图忽略它们,In
我目前有这个 TThread 将一些图像下载到桌面,这是线程代码: type TDownloadUpdateAnimateEvent = procedure(Sender: TObject; AA
我正在尝试运行此代码: var objHttp: TIdHTTP; ... objHttp.HandleRedirects := True; objHttp.AllowCookies :=
我正在尝试使用 TIdHTTP 上传文件。问题是当请求发送到服务器时访问 token 会发生更改。 我使用的访问 token 是fJNhDM6TlcpeVmD8h3jFuPJS71sxwZB8bZBX
主要目标是将所有数据发送到远程 mysql 数据库。我使用 TidHTTP 作为 POST 方法。拥有近 10.000 条记录,约 2MB 数据。当我运行delphi代码时,上传json数据。但有些记
我使用 IdHTTP.get 来获取 url 的 HTMl,但是在这个 url 中是一个用 ajax 加载的表,我必须等待几秒钟才能加载它,然后才能获取页面的 HTML。 我可以等一下吗? 最佳答案
我是一名优秀的程序员,十分优秀!