О чем эта статья?
Я немного занимаюсь программированием, откровенно говоря по большей части это говно-код, но я и не настоящий сварщик. И так вышло что в ру-нете неплохо освещены азы, чуть хуже вопросы посложнее, а некоторые вопросы либо не освещены вовсе, либо подавляющее большинство пишет что это невозможно в принципе или невозможно без изобретения велосипедов. А может я просто плохо гуглил. В общем понадобилось мне однажды выполнять GET и POST запросы из VBA, это не сложный в общем-то язык для офисного пакета Microsoft, в этой статье вы узнаете как без установки сторонних компонент, изобретения велосипедов и прочего общаться с серверами в Интернет из Excel, Access или других офисных приложений.
Как работать с Веб-серверами из VBA?
Первым делом нужно открыть редактор VBA и подключить библиотеку Microsoft XML -> Tools -> References — в списке находим нужную библиотеку и ставим галочку:

В зависимости от версии офиса, установленных обновлений и другого софта у вас в списке могут быть разные версии, выбирать можно любую:1. Microsoft XML, v 3.0.
2. Microsoft XML, v 4.0 (если установлен пакет MSXML 4.0).
3. Microsoft XML, v 5.0 (устанавливается вместе с Office 2003 – 2007).
4. Microsoft XML, v 6.0 устанавливается с последними версиями MS Office 2010 и новее.У меня в системе были все из списка, я пробовал разные и со всеми работало, решил подключить самую новую.
А далее все просто, вот пример GET-запроса:
Private Sub get_zaproz_from_VBA_Click() ' это кнопка на форме
Dim xmlhttp As New MSXML2.XMLHTTP60, myurl As String
myurl = "https://kakpedia.org"
xmlhttp.Open "GET", myurl, False
xmlhttp.Send
MsgBox (xmlhttp.responseText)
End Sub
И если все сделано верно, то откроется окошко с Html-кодом, который отдал сервер. Некоторые серверы ничего не отдадут (например гугл мне почему-то отказался отвечать) — это нормально, пробуйте несколько.
Задать если необходимо, HTTP-заголовки можно вот так:
xmlhttp.setRequestHeader "Content-Type", "text/json"
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.setRequestHeader "User-Agent", "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405"
xmlhttp.setRequestHeader "Authorization", AuthCredentials
POST-запрос из VBA:
Public Sub post_zapros_from_VBA()
Dim xmlhttp As New MSXML2.XMLHTTP, myurl As String
myurl = "Сюда впишите адрес формы"
xmlhttp.Open "POST", myurl, False
xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
xmlhttp.Send "name=codingislove&email=admin@codingislove.com"
MsgBox (xmlhttp.responseText)
End Sub
Простая авторизация:
user = "логин"
password = "пароль"
xmlhttp.setRequestHeader "Authorization", "Basic " + Base64Encode(user + ":" + password)
Добрый день!
post_zapros_from_VBA() и get_zaproz_from_VBA() работают. А на Base64Encode ругается, что не дефинирован.
В чем может быть проблема?
//А на Base64Encode ругается, что не дефинирован.
Забейте. Этот код авторизации в вашем случае не подходит и работать не будет, он для другого случая.
Спасибо! Забил.
А как же мне справиться с авторизацией, если это возможно.
Открывайте консоль разработчика (правый клик по элементу формы) картинка во вложении
Вложение
Затем перейдите по стрелкам, откройте вкладку сеть, выберите All или пункт рядом, и затем сабмитьте форму — жмите логин. В окошке появятся запросы, вам нужно будет найти свой про авторизацию, кликаете по нему, справа откроется окно с параметрами — их может быть много, составляете такой же запрос в акцессе и пробуете. Картинку откройте в новом окне она увеличится, я для примера показал запрос который постит коммент в блог.
Вложение
Здравствуйте!
Пытаюсь провести авториацию на этом сайте
https://web.timify.com/login?locale=en-mt&view=weekly&redirect=/
Попробовал Ваш код для авторизации, VBA ругается на Base64Encode.
В чем может быть причина?
Благодарю за ответ!
А как ругается? Может какой-то библиотеки не хватает.
Но вообще это код для «штатной авторизации» в вебе, ее практически никто не использует. На ваш сайт по ссылке надо делать POST или GET запрос с параметрами. Авторизуйтесь вручную и посмотрите в консоли браузера какие параметры шлет форма на сервер, затем их же отправьте запросом из акцесса.
Ругается, что функция не дефинирована. Но Microsoft XML, v 6.0 подключена.
А относительно POST или GET… Если бы я еще знал, что это.
Но и то и другое пробовал — работает.
Так, какой у вас уровень знаний? Вы знаете как работает интернет и что происходит после того как вы вводите логин с паролем и нажимаете кнопку войти?
POST или GET — это типы запроса которые отправляет браузер на сервер, сервер присылает ответ, затем процесс повторяется.
По вашей ссылке есть форма, она обрабатывается яваскриптом, вам нужно открыть в браузере консоль разработчика, заполнить форму и нажать логин. После этого на сервер отправится запрос — вы увидите его в консоли разработчика, запрос будет состоять из параметров и значений, вам нужно такой же запрос написать вручную в акцессе.
Кстати POST тоже не паботает -жалуется не отсутствие дефиниции xmlhttp
Ну насколько я могу судить проблема в отсутствии библиотеки XML, попробуйте выбрать другую версию может.