从 Delphi 10.3 中的 TWebBrowser OnNavigateError 中提取 StatusCode

Posted

技术标签:

【中文标题】从 Delphi 10.3 中的 TWebBrowser OnNavigateError 中提取 StatusCode【英文标题】:Extracting StatusCode from TWebBrowser OnNavigateError in Delphi 10.3 【发布时间】:2021-05-11 17:39:38 【问题描述】:

我正在尝试在 TWebBrowser 的 OnNavigateError 事件中获取 HTTP 响应代码。传递给我的 StatusCode 始终是 -2146697211,而它应该是 404。我错过了什么?我正在使用 Delphi 10.3。

【问题讨论】:

【参考方案1】: TWebBrowser 使用微软的 Internet Explorer,所以 information about the NavigateError event can be found online。 StatusCode 参数links to "NavigateError Event Status Codes" 的解释 - 在那里您可以看到典型的 3 位 HTTP 状态代码,还有其他的。 -2146697211十进制 值是 十六进制 中的 $800C0005 - 两者都匹配 INET_E_RESOURCE_NOT_FOUND 常量,这又是 links to another page: 表示“未找到服务器或代理。”

为什么这是一个单独的错误代码而不是 HTTP 错误代码?因为它发生在执行 HTTP 之前:查找主机名的 IP 地址失败 - 没有人知道您尝试浏览的主机名具有哪个 IP 地址。这就是Domain Name System (DNS) 的用途。无法与服务器取得联系与能够并获得响应是不同的事情。 HTTP 404 是回复。但是由于您甚至没有收到响应,因此您无法获得 HTTP 状态代码。


长话短说:找不到主机(而不是“HTTP 404”=找到主机,但不是您要查找的页面)。尝试使用可以实际解析的地址/主机名。

【讨论】:

以上是关于从 Delphi 10.3 中的 TWebBrowser OnNavigateError 中提取 StatusCode的主要内容,如果未能解决你的问题,请参考以下文章

转:Delphi10.3 中通过JNI调用 Java 函数

Delphi 10.3最新消息

Delphi 10.3:找不到所需的包

Delphi 10.3.1来了

如何修复从Delphi应用程序调用它时在C ++ DLL中的MessageBox中显示的无效字符?

Delphi10.3通过Json.Serializers单元对大量数据序列化