Я использую WinHTTP в Access 2007 VBA, чтобы получить список элементов, для которых требуется учетная запись для входа в файлы 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 сохраняет Set-Cookie, возвращаемый HTTP-сервером после успешного входа в систему.
Затем мне нужно получить конфиденциальную страницу, доступную только для зарегистрированного пользователя: 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.