You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA调用带Basic认证Webservice时认证信息缓存问题咨询

解决VBA调用Basic认证Webservice的凭据缓存问题

我来帮你搞定这个头疼的缓存问题——你遇到的其实是MSXML2.XMLHTTP依赖的WinINet库默认缓存Basic认证凭据的行为,导致后续哪怕传错误密码也能蒙混过关。下面针对你的两个问题逐一解答:

1. 缓存数据的存储位置与删除方法

存储位置

MSXML2.XMLHTTP用的是Windows WinINet缓存,和IE的浏览缓存是共享的,具体路径根据Windows版本略有不同:

  • Win10/11:C:\Users\<你的用户名>\AppData\Local\Microsoft\Windows\INetCache
  • 旧版Windows:C:\Users\<你的用户名>\AppData\Local\Microsoft\Windows\Temporary Internet Files

这里面不仅存网页缓存,还藏着Basic认证的凭据信息。

删除方式

手动清除

  • 打开IE(或者Edge的IE模式),依次点设置→互联网选项→常规→删除,勾选「密码」和「临时Internet文件」,确认后就能清掉缓存的凭据。
  • 也可以直接导航到上面的缓存目录,删掉里面的所有文件(注意有些文件可能被占用,得先关掉相关进程)。

VBA代码自动清除

你可以调用Windows API来精准清除指定URL的缓存凭据,示例代码如下:

' 声明WinINet API函数(64位Office用PtrSafe,32位去掉)
Private Declare PtrSafe Function DeleteUrlCacheEntry Lib "wininet.dll" Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long

Sub ClearWebserviceAuthCache(strTargetUrl As String)
    Dim lngResult As Long
    lngResult = DeleteUrlCacheEntry(strTargetUrl)
    
    If lngResult = 0 Then
        Debug.Print "缓存清除失败,错误代码:" & Err.LastDllError
    Else
        Debug.Print "指定URL的认证缓存已清除"
    End If
End Sub

调用时直接传你的Webservice URL就行:ClearWebserviceAuthCache(strUrl)

2. 阻止VBA保存认证数据的根本解决办法

要从根源上避免这个问题,直接禁用MSXML2.XMLHTTP的凭据缓存功能就行——通过SetOption方法设置SXH_OPTION_DISABLE_USERNAME_PASSWORD_CACHING选项(对应值为4)。修改你的代码如下:

Set objRequest = CreateObject("MSXML2.XMLHTTP")
blnAsync = True
With objRequest
    ' 关键:禁用凭据缓存,避免后续请求自动复用旧凭据
    .SetOption 4, True ' SXH_OPTION_DISABLE_USERNAME_PASSWORD_CACHING = 4
    .Open "GET", strUrl, blnAsync
    .setRequestHeader "Authorization", "Basic " + EncodeBase64(user + ":" + passw)
    .Send
    ' 等待响应返回
    While objRequest.readyState <> 4
        DoEvents
    Wend
    strResponse = .responseText
End With

额外小技巧

如果上面的方法没生效,你可以试试改用MSXML2.ServerXMLHTTP对象,它的默认缓存策略更严格,不过同样可以加上上面的SetOption设置来确保万无一失。另外,临时绕开的方法是给URL加个随机参数(比如?t= & Timer),让每次请求的URL都是唯一的,不过这只是治标不治本,还是禁用缓存更靠谱。

内容的提问来源于stack exchange,提问作者Poppypraun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:52:48