VBA WinHttpRequest.5.1 Аутентификация через форму HTML - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь узнать, как использовать метод 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 мне следует получать и отправлять. Кто-нибудь сможет дать какое-то руководство по этому поводу?

...