Скачивание файла с сайта с авторизацией

Пример макроса для скачивания файла с авторизацией.

Для его работы, надо подключить библиотеку Microsoft WinHTTP Services (version 5.1.) в меню Tools - References

Сначала выполняется POST-запрос для авторизации,
потом GET-запрос для скачивания файла

Sub DownloadFile_Auth()
 
    loginURL$ = "http://www.mtkglobus.ru/info/account/"
    csvURL$ = "http://www.mtkglobus.ru/info/account/csv"
 
    Dim xmlhttp As New WinHttpRequest
    xmlhttp.Open "POST", loginURL$, False
 
    Dim POST() As Byte, PostData$
    ' здесь перечисляем параметры авторизации в формате name1=value1&name2=value2&name3=value3
    PostData = "mtklogin=MyLogin&mtkpass=MyPassword"
    POST = StrConv(PostData, vbFromUnicode)
 
    ' если надо - указываем заголовки запроса
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    xmlhttp.setRequestHeader "Referer", loginURL$
 
    ' отправляем запрос авторизации
    xmlhttp.Send (POST): DoEvents
 
    If xmlhttp.Status = 302 Then ' если произошел редирект (особенность конкретного сайта)
        Debug.Print "авторизация выполнена"
    Else
        Debug.Print "ошибка авторизации"
    End If
 
    ' теперь выполняем GET запрос для получения файла
    xmlhttp.Open "GET", csvURL$, False 
 
    xmlhttp.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
    xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
    xmlhttp.setRequestHeader "Referer", csvURL$
 
    xmlhttp.Send: DoEvents
 
    ' сохраняем ответ сервера в файл
    If xmlhttp.Status = 200 Then
        Set oStream = CreateObject("ADODB.Stream")
        oStream.Open
        oStream.Type = 1
        oStream.Write xmlhttp.responseBody
        oStream.SaveToFile "c:\filename.csv", 2        ' 1 = no overwrite, 2 = overwrite
        oStream.Close
    End If
 
End Sub

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Что делать? искать причину ошибки..
Что-то не так вы в коде написали

Здравствуйте, на строке
' сохраняем ответ сервера в файл
If xmlhttp.Status = 200 Then
Выходит ошибка 500.. подскажите что делать

Код в целом актуален, только нужно вносить корректировки касательно отправляемых параметров (названия и значения параметров, и адрес на который отправляется запрос)
На Маке работать не будет, там всё иначе (как именно, сказать не могу)

А код спустя 8 лет актуален?
У меня при попытках скачать файл скачивается html страница с авторизацией, при этом никаких ошибок не выдаёт, в чём может быть проблема?
P.s. Как можно было бы модифицировать код, чтобы он работал на MAC?

программа нужна для работы

Проблема - однозначно в вашем коде (мой же код работает)
(я ваш код не видел, не знаю, что там неправильно)
Если не готовы заплатить за готовое решение, - обратитесь на форумы по Excel, выложите там свой код, - и, скорее всего, вам укажут на ошибку.

Спасибо за ответ. Но файлы все равно как будто битые сохраняются. В чем вообще может быть проблема?

читаем внимательно комментарий в этой строке:

If xmlhttp.Status = 302 Then ' если произошел редирект (особенность конкретного сайта)

поставьте 200 вместо 302, и пробуйте

PS: у меня есть готовый макрос для atsenergo - который авторизуется, скачивает файлы ZIP за заданный день или текущий месяц, распаковывает файлы, и потом подставляет данные из скачанных файлов в таблицу Excel
Могу продать вам это готово решение. Если интересно - обращайтесь на почту или в скайп

Здравствуйте, У меня в данном вопросе постоянно на строчке
If xmlhttp.Status = 302 Then
переходит на else. Т.е, я так понимаю, он не авторизуется?

Код в точности такой же кроме указания заголовков.
Вот мои изменения

loginURL$ = "https://www.atsenergo.ru/nauth"
csvURL$ = "https://www.atsenergo.ru/nreport?fid=F62229B128E66F39E04010AC47066C27"

PostData = "partcode=mypartcode&username=myname&password=mypassword"

Скачиваю файл zip. Он сохраняет какой-то файл zip , но открыть я его не могу и размер его совершенно другой.

Что подскажете изменить, подкорректировать?

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Подтвердите, пожалуйста, что вы - человек:
   __     _____   _           _          ___  
/ /_ |___ | | | __| | ____ / _ \
| '_ \ / / | | / _` | |_ / | | | |
| (_) | / / | |___ | (_| | / / | |_| |
\___/ /_/ |_____| \__,_| /___| \__\_\
Введите код, изображенный в стиле ASCII-арт.

Не получается применить макрос? Не удаётся изменить код под свои нужды?

Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.