Indy IdHTTP 未正确报告状态

Indy IdHTTP not reporting status correctly

我已指定 OnStatus 处理程序使用 AStatusText 参数更新标签。

在处理程序中设置断点时,它只会在我执行 Get("google.com") 时在 hsConnected 状态下中断。我知道我不应该得到完整的范围,但我至少应该在 hsConnected.

之前得到 hsResolvinghsConnecting 消息

可用状态列表:

hsResolving,
hsConnecting,
hsConnected,
hsDisconnecting,
hsDisconnected,
hsStatusText,
ftpTransfer,
ftpReady,
ftpAborted

知道为什么我没有获得其他状态吗?

hsConnected 是由 TIdTCPClientCustomOnStatus 事件报告的,但是您要查找的其他状态是由 TIdIOHandlerOnStatus 事件报告的] 相反。

如果 TIdTCPClientCustom.Connect()TIdCustomHTTP.CheckAndConnect() 必须创建一个新的隐式 IOHandler 对象,一个 OnStatus 处理程序被分配给它,因此 TIdTCPClientCustom.OnStatus 事件被调用。但是,如果在调用 Connect() 之前已经分配了 IOHandler,则不会分配 OnStatus 处理程序。您必须将自己的 OnStatus 处理程序分配给您分配的任何 IOHandler。

有一个 TODO 项可以使 OnStatus 事件连接更加自动化。

最有可能发生这种情况的情况是,如果您在请求 HTTPS 网址之前手动分配自己的 SSLIOHandler。在这种情况下,您可以将 OnStatus 处理程序分配给您的 SSLIOHandler。另一方面,如果您使用的是最新版本的 Indy,它可以自动创建隐式 SSLIOHandler(包括 OnStatus 连接),因此您不必再分配自己的(除非您需要自定义其设置):

New HTTPS functionality for TIdHTTP

TIdHTTP now has new functionality that allows it to auto-create an internal default SSLIOHandler object when requesting an HTTPS url if no IOHandler has been assigned yet.