我在 Access 2007 VBA 中使用 WinHTTP 来获取一些需要cookie 登录凭据帐户的项目列表。
首先,我通过https://www.example.com/login.php登录:
Dim strCookie As String, strResponse As String, _
strUrl As String
'
Dim xobj As Object
'
Set xobj = New WinHttp.WinHttpRequest
'
strUrl = "https://www.example.com/login.php"
xobj.Open "POST", strUrl, False
xobj.SetRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
xobj.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xobj.Send "username=johndoe2&password=mypassword"
'
strCookie = xobj.GetResponseHeader("Set-Cookie")
strResponse = xobj.ResponseText
strResponse的内容表明我的登录是好的,因为johndoe2在这个字符串中是受欢迎的。strCookie保存登录成功后 HTTP 服务器返回的 Set-Cookie。
接下来,我需要获取一个仅供登录用户访问的机密页面:https ://www.example.com/secret-contents.php 。我这样做,使用以前的 Set-Cookie 标头strCookie,重新发送到服务器:
'
' now try to get confidential contents:
'
strUrl = "https://www.example.com/secret-contents.php"
xobj.Open "GET", strUrl, False
xobj.SetRequestHeader "Cookie", strCookie
xobj.Send
'
strCookie = xobj.GetResponseHeader("Set-Cookie")
strResponse = xobj.ResponseText
不幸的是,它失败了,因为新的strResponse表明获取的内容不是必需的,而是登录页面。而且strCookie也发生了变化。
这已经过测试并且没有任何效果,因为它仅适用于 Windows/OS 链接身份验证,例如著名的基本、NTLM、摘要和 Kerberos 身份验证,不适用于基于 cookie 的身份验证:
xobj.SetCredentials "johndoe2", "mypassword", 0
除了 Set-Cookie 之外,还有什么可以作为标头发送到远程服务器,以便使用先前认证的凭证?
服务器使用typo3 CMS 框架。