Я пытаюсь узнать, как использовать метод WinHttp для загрузки файла по следующей ссылке с использованием VBA:
https://sintegre.ons.org.br/sites/9/13/82/_layouts/download.aspx?SourceUrl= / sites / 9/13/82 / Produtos / 243 / Resultado_Final_28_02_2020_para_01_03_2020.zip
Моя проблема заключается в том, что для загрузки веб-страницы требуется аутентификация, через которую я не могу пройти. Из других похожих вопросов, которые я обнаружил, я считаю, что моя проблема в том, что при входе на этот сайт используется форма HTML (аналогично проблеме, описанной в этом вопросе: Не понимаю, почему WinHTTP НЕ аутентифицирует определенный ресурс HTTPS ), но я так и не понял, как решить эту проблему в моем случае. Это то, что я смог сделать до сих пор:
Sub DownloadFile()
myusername = "myusername"
mypasswd = "mypasswd"
Dim myURL As String
mainURL = "https://sintegre.ons.org.br/"
myURL = "https://sintegre.ons.org.br/sites/9/13/82/Produtos/243/Resultado_Final_04_02_2020_para_06_02_2020.zip"
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
str_auth = "username=" & myusername & "&password=" & mypasswd
WinHttpReq.Open "POST", mainURL, False
WinHttpReq.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WinHttpReq.Send str_auth
WinHttpReq.Open "GET", myURL, False
WinHttpReq.Send
End Sub
Может ли кто-нибудь показать мне, как пройти аутентификацию в этом случае?
ОБНОВЛЕНИЕ
Я сделал некоторые изменения в коде, но все еще не смог войти в систему:
Sub DownloadFile()
Dim myURL As String
mainURL = "https://sintegre.ons.org.br/"
myURL = "https://sintegre.ons.org.br/sites/9/13/82/Produtos/243/Resultado_Final_04_02_2020_para_06_02_2020.zip"
myusername = "myusername"
mypasswd = "mypasswd"
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
str_auth = "username=" & myusername & "&password=" & mypasswd & "submit.Signin=Entrar"
WinHttpReq.Open "POST", mainURL, False
WinHttpReq.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
WinHttpReq.Send str_auth
strCookie = WinHttpReq.GetResponseHeader("Set-Cookie")
strResponse = WinHttpReq.ResponseText
WinHttpReq.Open "GET", myURL, False
WinHttpReq.SetRequestHeader "Connection", "keep-alive"
WinHttpReq.SetRequestHeader "User-Agent", "Chrome/80.0.3987.149"
WinHttpReq.SetRequestHeader "Cookie", strCookie
WinHttpReq.Send
Debug.Print WinHttpReq.ResponseText
Debug.Print WinHttpReq.Status()
End Sub
Прямо сейчас текст ответа возвращает «У вас нет разрешения на просмотр этого каталога или страницы» (статус 403 ).
РЕДАКТИРОВАТЬ:
Проведя дополнительное исследование, я думаю, что моя проблема может быть связана с получением и повторной отправкой правильных файлов cookie в процессе аутентификации. Моя проблема в том, что я не могу определить, какие файлы cookie мне следует получать и отправлять. Кто-нибудь сможет дать какое-то руководство по этому поводу?