Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ScottОтветов: 4

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

Я хочу

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

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

Любые идеи?

httppostexcelvbawinhttprequest

Ответы

Ответ 1 · рейтинг 8 · Robert Mearns

Сторона запроса 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 · рейтинг 8 · Andrew

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

Ответ 3 · рейтинг 3 · Scott

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

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

Ответ 4 · рейтинг 2 · Naigel

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы