Выполнять HTTP-публикацию из Excel и анализировать результаты - PullRequest
9 голосов
/ 30 ноября 2009

У меня есть доступ к API. API принимает сообщение XML в качестве входных данных, а затем возвращает ответ XML с соответствующими данными.

Я хочу

  1. Отправить HTTP-сообщение на сервер (аутентификация и запрос будут отправлены вместе)
  2. Получение ответа (один из вариантов, который нужно вернуть - это CSV или XML)
  3. Вставьте данные в соответствующие строки и столбцы, а затем выполните анализ данных с использованием сводных таблиц.

У меня нет опыта программирования в Excel, но я хорошо владею различными языками веб-сценариев, HTML, CSS, Javascript и т. Д.

Есть идеи?

Ответы [ 4 ]

7 голосов
/ 02 декабря 2009

Если вам нужно отправить свой вводный XML как текст сообщения, вот как вы можете это сделать. Возможно, вам придется добавить больше или изменить заголовки запроса, чтобы он работал на вас.

Использование объекта DOMDocument облегчает работу с вашими XML-документами.

Добавить проект ссылки на;

  • Microsoft WinHTTP Services, версия 5.1
  • Microsoft XML, v6.0

Пример:

Dim xmlInput As String
xmlInput = "<YourXmlRequest></YourXmlPayload>"

Dim oXmlHttp As MSXML2.XMLHTTP60
Set oXmlHttp = New MSXML2.XMLHTTP60

oXmlHttp.Open "POST", serviceURL, False, "UserName", "Password"
oXmlHttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
oXmlHttp.setRequestHeader "Connection", "Keep-Alive"
oXmlHttp.setRequestHeader "Accept-Language", "en"

oXmlHttp.send xmlInput

Debug.Print oXmlHttp.responseText

Dim oXmlReturn As MSXML2.DOMDocument60
Set oXmlReturn = New MSXML2.DOMDocument60
oXmlReturn.loadXML oXmlHttp.responseText
6 голосов
/ 30 ноября 2009

Сторона запроса Excel может обрабатываться с помощью этого кода VBA.

Sub GetStuff()

Dim objXML As Object
Dim strData As String
Dim strResponse As String

 strData = "Request"
 Set objXML = CreateObject("MSXML2.XMLHTTP")

 objXML.Open "POST", "www.example.com/api?" & strData, False
 objXML.Send
 strResponse = objXML.responsetext

MsgBox strResponse

End Sub
2 голосов
/ 19 декабря 2009

Вот что я использовал:

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "POST", urlPath, False
objHTTP.setRequestHeader "Content-Type", "text/xml"
objHTTP.send (request)
1 голос
/ 04 октября 2017

Я предлагаю использовать WinHttp.WinHttpRequest.5.1 вместо MSXML2.XMLHTTP всякий раз, когда вам нужна проверка подлинности Windows, поскольку она позволяет использовать учетные данные текущего пользователя для входа в систему. Вот пример

Dim http As Object
Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
http.SetAutoLogonPolicy 0
http.Open "POST", "http://myUrl.html?param1=value1", False
http.setRequestHeader "Content-Type", "text/json"
http.setRequestHeader "User-Agent", "Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405"
http.send ("")

Ссылка: https://github.com/VBA-tools/VBA-Web/issues/15

...