Выполнять HTTP-публикацию из Excel и анализировать результаты

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

Я хочу

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

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

Любые идеи?


person Scott    schedule 30.11.2009    source источник


Ответы (4)


Сторона запроса 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
person Robert Mearns    schedule 30.11.2009

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

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

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

  • Службы Microsoft WinHTTP, версия 5.1
  • Microsoft XML, версия 6.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
person Andrew    schedule 02.12.2009
comment
Это выглядит хорошо. Однако я пытаюсь разобраться, на что мне нужно ссылаться, чтобы я мог использовать эти типы переменных. XMLHTTP... и т.д. - person Scott; 18.12.2009
comment
Похоже, мне нужно включить Microsoft XML? - person Scott; 18.12.2009

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

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
objHTTP.Open "POST", urlPath, False
objHTTP.setRequestHeader "Content-Type", "text/xml"
objHTTP.send (request)
person Scott    schedule 18.12.2009

Я предлагаю использовать 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

person Naigel    schedule 04.10.2017