【问题标题】:The waitForResponse method doesn't work with XMLHTTPwaitForResponse 方法不适用于 XMLHTTP
【发布时间】:2021-05-21 03:59:04
【问题描述】:

我有一个代码,我在其中声明了一个这样的变量

Dim http As New XMLHTTP60

然后在代码中,我使用了这一行

http.Open "POST", urlexample, False
http.Send strArg

如何使用waitForResponse 等待服务器响应请求。我尝试在.Send 语句之后像这样循环

While http.ReadyState <> 4: DoEvents: Wend

但这有时效果很好,但有时什么也不返回。

【问题讨论】:

    标签: excel vba xmlhttprequest


    【解决方案1】:

    查看对象模型似乎无法通过MSXML2.XMLHTTP60 使用此方法,但可以使用WinHttp.WinHttpRequest。然而后者没有ReadyState 属性。

    您需要调查默认超时,并查看是否需要在 WinHttp 对象上设置 SetTimeOuts 以获得更长的时间。

    Option Explicit
    Public Sub testing()
        Dim http As winHttp.WinHttpRequest
        Set http = New winHttp.WinHttpRequest
      
        With http
            '.SetTimeouts ........
            .Open "GET", "http://books.toscrape.com/", True
            .setRequestHeader "User-Agent", "Mozilla/5.0"
            .send
            .waitForResponse 1000
        End With
        Stop
    End Sub
    

    注意如果 .Open 中的 async arg 设置为 FALSE,您的请求将不会是异步的


    有趣的阅读:https://github.com/VBA-tools/VBA-Web/issues/337

    似乎 Tim Hall 的 VBA-Web 会是一个很好的预打包方式来解决这个问题。

    WinHTTP

    【讨论】:

    • 我在工作。如果这是一个新问题,请打开一个问题,因为其他人可能会在我查看之前回答它。
    • 您是否将 async 设置为 True?我并不是说这是解决方案。请问您目前的运行情况如何?
    • 我希望 True 会让情况变得更糟!查看 VBA 的 @Omegastripes 异步答案。我想他以前回答过你的一个问题。
    • @YasserKhalil 相当于?有 timeouts 但请求不是异步的。异步被移动:见stackoverflow.com/questions/9110593/…
    猜你喜欢
    • 1970-01-01
    • 2010-09-23
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 2014-07-21
    • 2018-03-29
    相关资源
    最近更新 更多