2009-11-30 4 views
8

У меня есть доступ к API. API принимает XML-сообщение в качестве ввода, а затем возвращает ответ XML с соответствующими данными.Выполнение HTTP-сообщения из Excel и анализа Результаты

Я хочу

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

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

Любые идеи?

ответ

6

Сторона запроса 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 
6

Если вам нужно отправить свой ввод 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 
+0

Это выглядит хорошо. Тем не менее, я пытаюсь разобраться, что мне нужно для ссылки, чтобы использовать эти типы переменных. «XMLHTTP» ... и т. Д. – Scott

+0

Похоже, мне нужно включить Microsoft XML? – Scott

2

Это то, что я в конечном итоге с помощью:

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

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