Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA XMLHTTP清除身份验证?_Vba_Xmlhttprequest - Fatal编程技术网

VBA XMLHTTP清除身份验证?

VBA XMLHTTP清除身份验证?,vba,xmlhttprequest,Vba,Xmlhttprequest,我正在编写一组VBA宏,其中它使用XMLHTTP对象向服务器发送异步请求。我正在通过以下方式发送基本身份验证: XMLHttpReq.setRequestHeader "Authorization","Basic " & Base64EncodedUserPass 这第一次效果很好。 但是,如果用户更改了他们的用户ID/密码,即使代码创建了一个全新的XMLHttpReq对象并将此头设置为新信息,它也会作为第一个用户登录到服务器,可能来自缓存的凭据 如何使代码“忘记”我以前已登录,并重新

我正在编写一组VBA宏,其中它使用XMLHTTP对象向服务器发送异步请求。我正在通过以下方式发送基本身份验证:

XMLHttpReq.setRequestHeader "Authorization","Basic " & Base64EncodedUserPass
这第一次效果很好。 但是,如果用户更改了他们的用户ID/密码,即使代码创建了一个全新的XMLHttpReq对象并将此头设置为新信息,它也会作为第一个用户登录到服务器,可能来自缓存的凭据

如何使代码“忘记”我以前已登录,并重新授权

根据要求编辑代码的相关部分;这其实并不复杂:

myURL = "http://my.domain.com/myscript.cgi"
Dim oHttp As New MSXML2.XMLHTTP
oHttp.Open "POST", myURL, False
oHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded'"
oHttp.setRequestHeader "Authorization","Basic " & Base64EncodedUsernamePassword
oHttp.send "PostArg1=PostArg1Value"
Result = oHttp.responseText

由于主流浏览器缓存方法的不同实现,这些问题已经在许多方面进行了讨论

我会给你什么工作为我,然后我在这个功能上找到的来源

我遇到的唯一解决方案是强制浏览器不缓存请求

myURL = "http://my.domain.com/myscript.cgi"
Dim oHttp As New MSXML2.XMLHTTP
oHttp.Open "POST", myURL, False
oHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded'"
oHttp.setRequestHeader("Cache-Control", "no-cache");
oHttp.setRequestHeader("Pragma", "no-cache");
oHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
oHttp.setRequestHeader "Authorization","Basic " & Base64EncodedUsernamePassword
oHttp.send "PostArg1=PostArg1Value"
Result = oHttp.responseText
似乎
缓存控制
适用于大多数浏览器,而
Pragma
仅适用于Firefox而不适用于IE(不知道为什么…)

如果修改,因为
用于IE,因为IE在自己的算法中使用不同的设置来确定是否应该缓存请求。XMLHttpRequest似乎与HTTP响应不同

小心:使用此代码,每次创建新对象时,您将需要
用户名
密码
。也许您应该创建一个新对象,实例化一次,然后在使用后销毁它。在这两者之间,您将在不同的函数中处理所有请求,只需一次身份验证


来源


如果我使用URL格式http[s]://用户:password@host/然后,我可以互换使用不同的用户名,但这似乎不太安全。也许这是唯一的方法?你有没有试着清除IE历史?我不想为了这一项任务而清除整个IE历史。底层宏将作为更大产品的一部分分发给客户,我觉得我不应该直接控制他们的IE缓存。你能展示更多的代码吗?在这种情况下,我唯一需要担心的浏览器是IE,因为我使用的是MSXML2.XMLHTTP对象,它(据我所知)只使用IE引擎。我会尝试一下。在第一次考试中,这是我所需要的,但我可能需要更多的调查。我还没有准备好给它打上“最佳答案”的旗号。我仍然在给这个“最佳答案”打上标记,因为它部分有效。如果在身份验证标头中发送了不正确的用户名和密码,导致IE“用户名/密码”弹出窗口,则会出现剩余问题。如果我在这里手动输入正确的用户ID和密码,那么在以后的调用中仍然会忽略身份验证头。有什么想法吗?