Как я могу отправить HTTP-запрос POST на сервер из Excel, используя VBA? - PullRequest
127 голосов
/ 01 октября 2008

Какой код VBA требуется для выполнения HTTP POST из электронной таблицы Excel?

Ответы [ 5 ]

137 голосов
/ 01 октября 2008
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.

49 голосов
/ 06 января 2011

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

39 голосов
/ 10 июля 2013

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

Большинство бэкэндов анализируют необработанные данные постов. Например, в 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".

6 голосов
/ 01 октября 2008

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

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

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

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

Короче говоря, он работает в основном так:

  1. Вызов метод открытия для подключения к удаленному серверу
  2. Позвоните отправьте , чтобы отправить запрос.
  3. Прочитать ответ через responseXML , responseText , responseStream или responseBody
0 голосов
/ 01 октября 2008

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

...