1

我已分配OnStatus处理程序以使用参数更新标签AStatusText

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

可用状态列表:

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

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

4

1 回答 1

1

hsConnectedOnStatus事件报告TIdTCPClientCustom,但您要查找的其他状态由OnStatus事件报告TIdIOHandler

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

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

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

TIdHTTP 的新 HTTPS 功能

TIdHTTP 现在具有新功能,允许它在尚未分配 IOHandler 时请求 HTTPS url 时自动创建内部默认 SSLIOHandler 对象。

于 2015-03-08T16:29:26.597 回答