VBscript中HttpRequest的ResponseText对同一URL不更新的问题求助
解决VBScript中XMLHTTP请求缓存问题
MSXML2.XMLHTTP对象会复用IE的本地缓存机制,仅添加Cache-Control: no-cache有时无法彻底绕过缓存,导致重复请求返回相同结果。以下是几种可靠的解决方法:
方案一:改用ServerXMLHTTP对象(推荐)
MSXML2.ServerXMLHTTP专为服务端/脚本场景设计,默认禁用缓存,无需额外配置:
On Error Resume Next Dim o Set o = CreateObject("MSXML2.ServerXMLHTTP") o.Open "GET", requestURL, False o.send If Err.Number <> 0 Then MsgBox Err.Description, 16, "Error" Else MsgBox o.responseText, 0, "Response" End If
方案二:补充多组缓存禁用请求头
如果必须使用XMLHTTP,同时添加多个缓存控制头,强制跳过本地和服务器缓存:
On Error Resume Next Dim o Set o = CreateObject("MSXML2.XMLHTTP") o.Open "GET", requestURL, False ' 组合多个缓存禁用头,覆盖不同场景 o.setRequestHeader "Cache-Control", "no-cache, no-store, must-revalidate" o.setRequestHeader "Pragma", "no-cache" o.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" o.send If Err.Number <> 0 Then MsgBox Err.Description, 16, "Error" Else MsgBox o.responseText, 0, "Response" End If
方案三:给URL添加唯一随机参数
通过修改URL,让每次请求的地址唯一,从根源上绕过缓存机制:
On Error Resume Next Dim o, uniqueURL ' 根据原有URL是否带参数,决定用?或&拼接随机时间戳 uniqueURL = requestURL & IIf(InStr(requestURL, "?") > 0, "&", "?") & "rand=" & Timer() Set o = CreateObject("MSXML2.XMLHTTP") o.Open "GET", uniqueURL, False o.send If Err.Number <> 0 Then MsgBox Err.Description, 16, "Error" Else MsgBox o.responseText, 0, "Response" End If
内容的提问来源于stack exchange,提问作者Hongchen Lin
相关产品推荐
相关产品推荐

