Какой код VBA требуется для выполнения HTTP POST из электронной таблицы Excel?
Какой код VBA требуется для выполнения HTTP POST из электронной таблицы Excel?
Ответы:
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.send("")
Кроме того, для большего контроля над HTTP-запросом вы можете использовать WinHttp.WinHttpRequest.5.1
вместо MSXML2.ServerXMLHTTP
.
objHTTP.responseText
.
ByRef
или нет. Вот почему их использование с объектными переменными типа, который не имеет члена по умолчанию, вызывает ошибки во время выполнения; и используя их на объекте, который имеет элемент по умолчанию, передает значение этого элемента по умолчанию вместо фактического объекта.
Если вам это нужно для работы на Mac и Windows, вы можете использовать QueryTables:
With ActiveSheet.QueryTables.Add(Connection:="URL;http://carbon.brighterplanet.com/flights.txt", Destination:=Range("A2"))
.PostText = "origin_airport=MSN&destination_airport=ORD"
.RefreshStyle = xlOverwriteCells
.SaveData = True
.Refresh
End With
Ноты:
Для получения более подробной информации, вы можете увидеть мое полное резюме о « использовании веб-служб из Excel ».
В дополнение к ответу Билла Ящера :
Большинство бэкэндов анализируют необработанные почтовые данные. Например, в PHP у вас будет массив, $_POST
в котором будут храниться отдельные переменные в данных поста. В этом случае вы должны использовать дополнительный заголовок "Content-type: application/x-www-form-urlencoded"
:
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "http://www.somedomain.com"
objHTTP.Open "POST", URL, False
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
objHTTP.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHTTP.send ("var1=value1&var2=value2&var3=value3")
В противном случае вы должны прочитать необработанные данные поста в переменной "$HTTP_RAW_POST_DATA"
.
Вы можете использовать ServerXMLHTTP
в проекте VBA, добавив ссылку на MSXML
.
- Откройте редактор VBA (обычно путем редактирования макроса)
- Перейти к списку доступных ссылок
- Проверьте Microsoft XML
- Нажмите ОК.
(из ссылок на MSXML в проектах VBA )
Документация ServerXMLHTTP MSDN содержит полную информацию обо всех свойствах и методах ServerXMLHTTP.
Короче говоря, это работает в основном так:
- Вызовите метод open для подключения к удаленному серверу.
- Вызов отправить отправить запрос.
- Прочитайте ответ через responseXML , responseText , responseStream или responseBody
Чтобы завершить ответ других пользователей:
Для этого я создал объект «WinHttp.WinHttpRequest.5.1» .
Отправить запрос с некоторыми данными из Excel, используя VBA:
Dim LoginRequest As Object
Set LoginRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
LoginRequest.Open "POST", "http://...", False
LoginRequest.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
LoginRequest.send ("key1=value1&key2=value2")
Отправьте запрос на получение с аутентификацией токена из Excel, используя VBA:
Dim TCRequestItem As Object
Set TCRequestItem = CreateObject("WinHttp.WinHttpRequest.5.1")
TCRequestItem.Open "GET", "http://...", False
TCRequestItem.setRequestHeader "Content-Type", "application/xml"
TCRequestItem.setRequestHeader "Accept", "application/xml"
TCRequestItem.setRequestHeader "Authorization", "Bearer " & token
TCRequestItem.send
TCRequestItem Object
, вы можете прочитать его как: TCRequestItem.ResponseText
после выполненияTCRequestItem.send