【问题标题】:XMLHTTP Caching: Xml is bringing the same data after the first request Excel VBAXMLHTTP 缓存:Xml 在第一次请求 Excel VBA 后带来相同的数据
【发布时间】:2015-10-18 02:55:31
【问题描述】:

我正在使用 XMLHTTP 阅读 XML 提要。我注意到当我第一次打开 Excel 文件时它读取良好,但是当 XML 更改并且我再次运行宏时,它会带来相同的先前数据。我做了一些关于如何停止缓存的研究。我读到添加一个随机数作为额外参数会修复它,但对我不起作用。

有什么想法吗?

Sub MLB_PinnyParser()

Dim Req As New XMLHTTP
Dim Resp As New DOMDocument
Req.Open "GET", "http://xml.pinnaclesports.com/pinnaclefeed.aspx?sporttype=Baseball&sportsubtype=MLB", False
Req.send
Resp.LoadXML Req.responseText

 For Each Event In Resp.getElementsByTagName("event")

'More code here

 Next Event

Set Req = Nothing
Set Resp = Nothing

End Sub

【问题讨论】:

    标签: xml vba excel caching


    【解决方案1】:

    您通常可以通过在每个请求中修改您的 URL 来克服这个问题。只需添加一个随机数作为查询字符串参数。例如:

    ' Seed the RNG somewhere at the start of your app...
    Randomize
    
    ...
    
    Sub MLB_PinnyParser()
    
        ' Generate a random, six-digit number...
        Dim intRand As Long
        intRand = Int((900000) * Rnd) + 100000
    
        ' Add the number as a param to the request...
        Dim strUrl As String
        strUrl = "http://xml.pinnaclesports.com/pinnaclefeed.aspx?sporttype=Baseball&sportsubtype=MLB" & "&blah=" & intRand
    
        Dim Req As New XMLHTTP
        Req.Open "GET", strUrl, False
        ...
    
    End Sub
    

    听起来您已经尝试过了,请尝试在您的请求中添加几个与缓存相关的标头,看看是否会有所不同:

    Req.SetRequestHeader "Cache-Co­ntrol", "no-cache,max-age=0"
    Req.SetRequestHeader "pragma", "no-cache"
    

    【讨论】:

    • 感谢您的回答。我试过添加这些标头但没有用..我读到这个类是为了做缓存..使用与 XMLHTTP 不同的对象怎么样。你知道其他类似WinHTTPRequest的你熟悉吗?
    • 你可以试试。但是看看@barrowc 的答案。听起来您的问题可能与缓存无关。
    【解决方案2】:

    点赞post

    将“Microsoft.XMLHTTP”更改为“Msxml2.ServerXMLHTTP”

    对我有用。

    【讨论】:

    • 有什么区别?
    【解决方案3】:

    这不是 XMLHTTP、Excel 或 VBA 问题。您尝试访问的提要仅按特定时间间隔更新,在这种特殊情况下,向请求中添加随机数无济于事。

    如果您查阅 Pinnacle Sports XML 提要 here 的序言(生成页面需要几秒钟),您会看到您正在拨打的电话返回的 XML 文件仅每十分钟更新一次.正确的用法是在第一次调用时下载该文件,使用从第一次调用返回的时间戳作为第二次调用的参数请求增量更新,然后通过相应地增加时间戳并传递来请求进一步更新(最多)每 60 秒作为参数。

    或者,您可以考虑使用 their API 而不是 XML 提要

    【讨论】:

    • 感谢您的回答。我提供的链接与您拥有的链接相同,但我有一些参数专门针对 MLB。我担心的是,如果您访问xml.pinnaclesports.com/pinnacleFeed.aspx?直接在末尾不添加最后一个 PinnacleFeedTime 将显示实时线。我已经与 Don Best 进行了测试,并且没有这样的 10 分钟延迟。如果我添加最后一个时间参数,它将仅显示在该时间间隔内发生的更改。基本上我每次查询提要时都需要整个提要。
    • 基本上我需要的是在不传递时间参数的情况下读取 xml,这样我就有了 Live Lines。我提到这一点是因为我确实有一个使用 HttpClient 在 C# 中运行的服务,该服务每 3 分钟运行一次并获取整个 xml,然后处理 HttpClient。但我看不到任何处理 Vba XMLHTTP 对象的方法。除了关闭和打开excel文件。!
    • This answer 及其 cmets 可以通过使用 WinHTTPRequest 而不是 XMLHTTP 为您提供另一条尝试路径
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2014-07-19
    • 2017-05-22
    相关资源
    最近更新 更多