2009-11-30 42 views
8

Tengo acceso a una API. La API toma una entrada XML como entrada y luego devuelve una respuesta XML con los datos relevantes.Realizar una publicación HTTP desde Excel y analizar resultados

Quiero

  1. Enviar el HTTP POST al servidor (Autenticación y solicitud será enviada juntos)
  2. Recibir la respuesta (Una de las opciones para ser devuelto es CSV o XML)
  3. Inserte los datos en las filas y columnas apropiadas y luego realice el análisis de datos utilizando tablas dinámicas.

no tengo un fondo de programación en Excel, pero estoy cómodo con diferentes lenguajes de script web, HTML, CSS, Javascript, etc.

¿Alguna idea?

Respuesta

6

El lado de solicitud de Excel se puede manejar con este código 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

Si usted tiene que enviar su entrada XML como cuerpo del mensaje aquí es cómo puede hacerlo. Es posible que deba agregar más o cambiar los encabezados de Solicitud para que funcione.

El uso del objeto DOMDocument facilita el trabajo con sus documentos xml.

Agregue un proyecto de referencias a;

  • Microsoft WinHTTP Servicios, versión 5.1
  • Microsoft XML, v6.0

Ejemplo:

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

Esto se ve bien. Sin embargo, estoy tratando de resolver lo que necesito hacer referencia para poder usar estos tipos de variables. "XMLHTTP" ... etc – Scott

+0

Parece que necesito incluir Microsoft XML? – Scott

2

Esto es lo que terminé usando:

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

Sugiero usar WinHttp.WinHttpRequest.5.1 en lugar de MSXML2.XMLHTTP cuando necesite la autenticación de Windows, porque le permite usar la credencial de usuario actual para iniciar sesión. Aquí está un ejemplo

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 ("") 

Referencia: https://github.com/VBA-tools/VBA-Web/issues/15

Cuestiones relacionadas