Как быстро и просто выполнять HTTP-запросы к web-серверу из VBA

Автор: | 26.10.2018

О чем эта статья?

Я немного занимаюсь программированием, откровенно говоря по большей части это говно-код, но я и не настоящий сварщик. И так вышло что в ру-нете неплохо освещены азы, чуть хуже вопросы посложнее, а некоторые вопросы либо не освещены вовсе, либо подавляющее большинство пишет что это невозможно в принципе или невозможно без изобретения велосипедов. А может я просто плохо гуглил. В общем понадобилось мне однажды выполнять 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)


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.