Пример макроса для скачивания файла с авторизацией.
Для его работы, надо подключить библиотеку 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, выложите там свой код, - и, скорее всего, вам укажут на ошибку.
Спасибо за ответ. Но файлы все равно как будто битые сохраняются. В чем вообще может быть проблема?
читаем внимательно комментарий в этой строке:
поставьте 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 , но открыть я его не могу и размер его совершенно другой.
Что подскажете изменить, подкорректировать?
Отправить комментарий