【问题标题】:ClearMyTracksByProcess Without Dialog | WinHttp.WinHttpRequest.5.1 | MSXML2.XMLHTTP没有对话框的 ClearMyTracksByProcess | WinHttp.WinHttpRequest.5.1 | MSXML2.XMLHTTP
【发布时间】:2020-02-03 20:15:40
【问题描述】:

我有一个运行 CreateObject("MSXML2.XMLHTTP").Open "GET" 的 VBS,但是,我需要在它运行之前删除 IE11 缓存,因为 get 会不断提取网站的缓存版本,该版本在初始 get 后 1 分钟内不会过期。如果我使用RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8,则会显示一个分散注意力的对话框。

myURL = "https://localhost/"

Set ohtmlFile = CreateObject("htmlfile")

Set oXMLHttp = CreateObject("MSXML2.XMLHTTP")
oXMLHttp.Open "GET", myURL , False
oXMLHttp.setRequestHeader "Cache-Control", "no-cache"
oXMLHttp.send

If oXMLHttp.Status = 200 Then

    ohtmlFile.Write oXMLHttp.responseText
    ohtmlFile.Close

不改变文件缓存,在初始拉取一分钟后仍然过期。

++++++++++++++++++++++++++++++++++++++++++

myURL = "https://localhost/"

Set ohtmlFile = CreateObject("htmlfile")

Set oXMLHttp = CreateObject("WinHttp.WinHttpRequest.5.1")
oXMLHttp.Open "GET", myURL , False
oXMLHttp.setRequestHeader "Cache-Control", "no-cache"
oXMLHttp.send

If oXMLHttp.Status = 200 Then

    ohtmlFile.Write oXMLHttp.responseText
    ohtmlFile.Close

oXMLHttp.responseText 不返回任何内容

++++++++++++++++++++++++++++++++++++++++++

CreateObject("WScript.Shell").Run "scripts\exe\PsExec64.exe -accepteula -nobanner -realtime -d RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8", 0, True

CreateObject("WScript.Shell").Run "scripts\exe\PsExec64.exe -accepteula -nobanner -realtime -d RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 264", 0, True

两者仍然随机显示一个弹出对话框。

【问题讨论】:

  • 你尝试过这样设置请求吗? .setRequestHeader "cache-control", "no-cache" 如果没有,您可以自己测试一下是否有助于解决问题。
  • 我试了一下,结果相同,到期时间仍然设置为距离初始拉动一分钟。
  • 您是否可以提供一个网页示例,我们可以使用该示例测试此代码以检查问题?因为我们无法仅使用上面的代码产生问题。它可以帮助缩小问题范围。

标签: vbscript internet-explorer-11 winhttp winhttprequest ie11-developer-tools


【解决方案1】:

为避免获得缓存响应,您可以改用ServerXmlHttpRequest 对象并设置Cache-Control 标头:

Set oXMLHttp = CreateObject("Msxml2.ServerXMLHTTP")

With oXMLHttp
    .open "GET", myURL, False
    .setRequestHeader "Cache-Control", "max-age=0"
    .send
End With

它也应该适用于WinHTTPRequest 对象:

Set oXMLHttp = CreateObject("WinHttp.WinHttpRequest.5.1")

根据我的经验,使用 WinHttpRequest,您甚至不需要设置 Cache-Control 标头,因此只需在代码中将 MSXML2.XMLHTTP 更改为 WinHttp.WinHttpRequest.5.1 即可完成所有设置。不过添加标题也无妨。

这应该可以解决您在提取缓存版本时遇到的最初问题。

【讨论】:

  • 当我申请 Msxml2.ServerXMLHTTPWinHttp.WinHttpRequest.5.1 时,我没有收到任何公开的数据。另外,当我使用oXMLHttp.setRequestHeader "Cache-Control", "max-age=0" 时,缓存过期仍保存为初始请求后一分钟。
  • 您将在.send 通话中取回数据。通常你想提供一个请求字符串,但你的问题中没有显示。您可以使用.responseText 从服务器获取响应。就"Cache-Control", "max-age=0" 标头而言,根据我的阅读,如果您使用MSXML2.XMLHTTP,则不会得到承认。我的建议是使用不需要任何标题的WinHttp.WinHttpRequest.5.1。请编辑您的问题以显示您到目前为止所做的尝试。您应该能够获得非缓存响应而不会遇到这么多麻烦。
  • 问题已更新。 ++++++包围的块不返回任何responseText
  • 看起来是 cookie 问题......当我运行邮递员 url 时它可以工作,当我运行我的 url(它使用登录 cookie)时,我被重定向到登录页面。 WinHttp.WinHttpRequest.5.1 不能与存储的 cookie 一起使用吗?
  • @ÉtienneLaneville 有人总是想对 vbscript 部分中的任何答案投反对票,即使稍后可以像你的情况一样接受,我知道他我会支持你 +1
猜你喜欢
  • 2022-09-19
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-22
  • 2015-08-07
  • 1970-01-01
  • 2011-06-24
相关资源
最近更新 更多