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

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

5 ответов


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. В приведенном выше примере, результат записывается в А2.
  • по поводу ввода... Если вы хотите обновить результаты при изменении определенных ячеек, убедитесь, что эти ячейки являются аргументом функции VBA.
  • этот не будет работать в Excel для Mac 2008, в котором нет VBA. Excel для Mac 2011 получил VBA обратно.

для получения более подробной информации, вы можете увидеть мое полное резюме о"использование веб-служб из Excel."


в дополнение к anwser Билл ящерица:

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

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


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

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

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

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

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

  1. вызов открыть способ подключения к удаленному серверу
  2. вызов отправить отправить запрос.
  3. читать ответ через свойства responsexml, responseText, responseStream или responseBody

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