Скачивание файлов с защищенного сайта с помощью VBA-Excel

Я пытаюсь загрузить файл с защищенной веб-страницы (с моей работы, поэтому я не могу опубликовать URL-адрес).

Когда я сохраняю байты (я использую запрос WinHTTP) в.xls, файл кажется поврежденным.

Мой код (без конфиденциальной информации) и небольшой код, взятый "HTTP Header Live".

option explicit

Sub SaveFileFromURL()

Dim FileNum As Long
Dim FileData() As Byte
Dim WHTTP As Object
Dim SetCookieString As String
Dim mainUrl As String
Dim fileUrl As String
Dim SavePath As String
Dim strAuthenticate As String

'this is the url to login, extracted with HTTP Header Live.
'however, the url shown in the browser is: "https://www.website.com/retro/default.asp?idioma=ES"
mainUrl = "https://www.website.com/retro/logincheck.asp"

'this is the url for to download the file, but need to send a cookie as credentials
'(if you login via browser and paste the link, it will popup the saveas dialog, but if you don't login, it will return an internal error)
fileUrl = "https://www.website.com/retro/VerBordero.asp?id=27348&p=3º Trimestre 2019&n=0&m=UNKNOWN&con=CIRCULAR&fmt=xls"

'the path where to save the file with the extension I know it will have.
SavePath = "C:\Users\Victor\Desktop\bordero.xls"

'authetication should be:    
strAuthenticate = "txtUser=MYUSER&txtpwd=MYPASS&lg=es"

'I login to catch the cookie that it is suppose to allow me to download the file.
Set WHTTP = CreateObject("WinHTTP.WinHTTPrequest.5.1")
WHTTP.Open "POST", mainUrl, False
WHTTP.Send strAuthenticate

'if it is correct:
If WHTTP.Status = 200 Then

    'I get the cookie
    SetCookieString = WHTTP.getResponseHeader("Set-Cookie")

    'Then you have to GET direct file url
    WHTTP.Open "GET", fileUrl, False
    WHTTP.setRequestHeader "Content-Type", "application/x-msexcel"
    WHTTP.setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
    WHTTP.setRequestHeader "Accept-Language", "es-ES,es;q=0.8,en-US;q=0.5,en;q=0.3"
    WHTTP.setRequestHeader "Cookie", SetCookieString
    WHTTP.Send

    'if i get the file
    If WHTTP.Status = 200 Then

        'download bytes
        FileData = WHTTP.responseBody
        Set WHTTP = Nothing

        'Save the bytes into file
        FileNum = FreeFile
        Open SavePath For Binary Access Write As #FileNum
            Put #FileNum, 1, FileData
        Close #FileNum

    End If

End If

End Sub

Код работает. Я получил "ОК" во всех проверенных состояниях, но когда я пытаюсь открыть файл (размер которого составляет 622 КБ, то же самое, как если бы я загружал его вручную), Excel предлагает мне сообщение о том, что для ячейки слишком много данных. Если я нажму "все равно открыть", я смогу прочитать некоторые части.

Похоже, файл сохраняется в другой кодировке.

Некоторый код из HTTP Header Live.

ВХОД:
https://www.website.com/retro/logincheck.asp
Хост: www.website.com
Пользовательский агент: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Принять: text / html, application / xhtml+xml, application / xml;q = 0.9,/;q = 0.8
Accept-Language: es-ES,es;q = 0.8,en-US;q = 0.5,en;q = 0.3
Accept-Encoding: gzip, deflate, br
Content-Type: application / x-www-form-urlencoded
Content-Length: 38
Источник: https://www.website.com/
Подключение: keep-alive
Referer: https://www.website.com/retro/default.asp?idioma=ES
Cookie: cc_social = yes; cc_analytics = да; cc_advertising= да; cc_needed = да; _ga=GA1.2.859443177.1570897852; __utma=136336428.859443177.1570897852.1570897852.1570897852.1; __utmz=136336428.1570897852.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic| utmctr=(не%20предоставляется); ASPSESSIONIDQWSBSQAD=LDIIIENCGKDHMEJEGKJKBDMM; cookieconsent= отклонить; ASPSESSIONIDQWQCRRBD = PCOIENHDNLHCKNODMJLKAFGM
Upgrade-Незащищенные-запросы: 1
txtUser = MyUser &txtpwd=MYPASS и Л.Г. = эс
POST: HTTP/2.0 302 Найдено
Дата: Ср, 4 декабря 2019 22:20:17 GMT
Сервер: Microsoft-IIS/8.5
кэш-контроль: частное
содержание -type: text/html
истекает: среда, 4 декабря 2019 г., 22:20:18
Местоположение по Гринвичу: retro.asp
content-length: 130
через: 2.0 www.website.com
X-Firefox-Spdy: h2

ФАЙЛ:
https://www.website.com/retro/VerBorderoGRxls.asp?id=27348&p=3º Trimestre 2019& n = 0 & m = UNKNOWN& con = CIRCULAR&fmt = xls
Хост: www.website.com
Агент пользователя: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:70.0) Gecko/20100101 Firefox/70.0
Принять: text / html, application / xhtml+xml, application / xml;q = 0.9,/;q = 0.8
Accept-Language: es-ES,es;q = 0.8,en-US;q = 0.5,en;q = 0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Referer: https://www.website.com/retro/borderos_resumen.asp
Cookie: cc_social = yes; cc_analytics = да; cc_advertising= да; cc_needed = да; _ga=GA1.2.859443177.1570897852; __utma=136336428.859443177.1570897852.1570897852.1570897852.1; __utmz=136336428.1570897852.1.1.utmcsr=google|utmccn=(organic)|utmcmd=organic| utmctr=(не%20предоставляется); ASPSESSIONIDQWSBSQAD=LDIIIENCGKDHMEJEGKJKBDMM; cookieconsent= отклонить; ASPSESSIONIDQWQCRRBD = PCOIENHDNLHCKNODMJLKAFGM
Upgrade-Insecure-Requests: 1

GET: HTTP / 2.0 200 OK
дата: среда, 4 декабря 2019 г., 22:21:40 GMT
server: Microsoft-IIS/8.5
cache-control: private
content-type: application / x-msexcelexpires
: Wed, 04 Dec 2019 22:21:40 GMT
content-length: 637440
через: 2.0 www.website.com
X-Firefox-Spdy: h2

0 ответов

Другие вопросы по тегам