2

编辑:这个问题已经改变,因为我一直在等待答案并进行了外部研究。我已经改写了标题,问题实际上是我正在寻找 MSXML2 的替代方案(即使这意味着编写套接字代码)。问题的原始正文留在这里以供参考,并帮助将来进行类似搜索的人。

在 VBA 中,使用 MSXML2 对象,有没有办法在 readyState = 3 时访问流数据?

我正在使用该OnReadyStateChange方法,但是在readyState为4之前我似乎无法访问。responseText当readyState为3时,似乎没有任何数据。

VBA 中是否有任何方法可以在 HTTP 流响应进入时访问它?我可以在 MSXML2 中使用的另一种方法,还是更好的(免费的、可分发的)对象来进行“AJAX”调用?

更多信息:如果我尝试阅读responseStream(或 responseText),错误描述为:

The data necessary to complete this operation is not yet available.

第二次编辑,更多信息:这个链接基本上说这是INTERACTIVE(3)状态下的预期行为:http:
//msdn.microsoft.com/en-us/library/windows/desktop/ms753800(v=vs.85) .aspx

所以我肯定在寻找“还有其他选择吗?” 回答。

4

1 回答 1

3

这是我编写的一段旧代码,用于使用 WinInet API 读取块,它不是异步的,但它在每 512 个字节后公开一个读取缓冲区(我添加了一个 Debug.Print "READ" & lngTotalBytesRead 来说明) - http:// pastebin.com/6uMhkBUF

据我所知,它工作正常,但我不得不稍微解开它。

  • 您将需要删除对App.in的调用HTTPGetUAString(最初是 VB6)等等HTTPGetUAString = "MyThing"

  • If (lngContentLen = 0&) Then lngContentLen = (BUFF_LEN * DUMMY_BUFF_MULTIPLIER)是剩菜;您可以删除该行。(随后,如果 lngContentLen 为零,则大小预先未知)

于 2013-01-10T13:36:36.417 回答