Как я могу отправить HTTP POST-запрос на сервер из Excel с помощью VBA?

StackOverflow https://stackoverflow.com/questions/158633

Вопрос

Какой код 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.

Другие советы

Если вам нужно, чтобы это работало как на 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."

В дополнение к ответу на Ящерица Билл:

Большинство серверных программ анализируют необработанные данные post.Например, в PHP у вас будет массив $_POST, в котором будут храниться отдельные переменные внутри данных post.В этом случае вам придется использовать дополнительный заголовок "Content-type:заявка/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")

В противном случае вам придется прочитать необработанные данные post из переменной "$ HTTP_RAW_POST_DATA".

Вы можете использовать ServerXMLHTTP в проекте VBA, добавив ссылку на MSXML.

  1. Откройте редактор VBA (обычно путем редактирования макроса).
  2. Перейдите к списку доступных ссылок
  3. Проверьте Microsoft XML
  4. Нажмите кнопку ОК.

(из Ссылка на MSXML в проектах VBA)

Тот Самый Документация ServerXMLHTTP MSDN содержит полную информацию обо всех свойствах и методах ServerXMLHTTP.

Короче говоря, однако, это работает в основном следующим образом:

  1. Звонить Открыть способ подключения к удаленному серверу
  2. Звонить Отправить чтобы отправить запрос.
  3. Прочтите ответ через responseXML, Текст ответа, Поток ответов или Реагирующее тело

Я сделал это перед использованием библиотеки MSXML, а затем с помощью объекта XMLHttpRequest.Видишь http://scriptorium.serve-it.nl/view.php?sid=40

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top