Какой код VBA требуется для выполнения HTTP POST из электронной таблицы Excel?
Как отправить запрос HTTP POST на сервер из Excel с помощью VBA?
Ответ 1
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.
Ответ 2
Если вам нужно работать как на 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
Примечания:
- Что касается вывода... Я не знаю, можно ли вернуть результаты в ту же ячейку, которая называется функцией VBA. В приведенном выше примере результат записывается в A2.
- Что касается ввода... Если вы хотите, чтобы результаты обновлялись при изменении определенных ячеек, убедитесь, что эти ячейки являются аргументом вашей функции VBA.
- Это не будет работать в Excel для Mac 2008, у которого нет VBA. Excel для Mac 2011 получил обратно VBA.
Для получения более подробной информации вы можете увидеть мое полное резюме о с помощью веб-служб из Excel.
Ответ 3
В дополнение к ответу на вопрос Билла ящерицы:
Большинство бэкэндов анализируют необработанные почтовые данные. Например, в 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".
Ответ 4
Вы можете использовать ServerXMLHTTP в проекте VBA, добавив ссылку на MSXML.
- Откройте редактор VBA (обычно путем редактирования макроса)
- Перейти к списку доступных ссылок
- Проверьте Microsoft XML
- Нажмите ОК.
(из ссылки на MSXML в проектах VBA)
В документации MSX ServerHMLHTTP MSDN есть полная информация обо всех свойствах и методах ServerXMLHTTP.
Короче говоря, это работает в основном так:
- Вызовите открытый метод для подключения к удаленному серверу
- Позвоните отправить, чтобы отправить запрос.
- Прочитайте ответ через responseXML, responseText, responseStream или responseBody
Ответ 5
Я сделал это перед использованием библиотеки MSXML, а затем с помощью объекта XMLHttpRequest. См. http://scriptorium.serve-it.nl/view.php?sid=40
