xmlhttp por parser net msxml2 enviar json vba curl post vb6

json - por - msxml2 xmlhttp vb6



CURL Equivalente a los datos POST JSON con VBA (1)

Intente hacer una autorización básica como se muestra en el siguiente ejemplo:

Sub Test() sUrl = "https://xxxxxxx.waxlrs.com/TCAPI/statements" sUsername = "*******************" sPassword = "******************" sAuth = TextBase64Encode(sUsername & ":" & sPassword, "us-ascii") With CreateObject("WinHttp.WinHttpRequest.5.1") .Open "POST", sUrl, False .setRequestHeader "Content-Type", "application/json" .setRequestHeader "Authorization", "Basic " & sAuth .setRequestHeader "x-experience-api-version", "1.0.0" .send (stringJSON) apiWaxLRS = .responseText End With End Sub Function TextBase64Encode(sText, sCharset) Dim aBinary With CreateObject("ADODB.Stream") .Type = 2 '' adTypeText .Open .Charset = sCharset .WriteText sText .Position = 0 .Type = 1 '' adTypeBinary aBinary = .Read .Close End With With CreateObject("Microsoft.XMLDOM").CreateElement("objNode") .DataType = "bin.base64" .NodeTypedValue = aBinary TextBase64Encode = Replace(Replace(.Text, vbCr, ""), vbLf, "") End With End Function

Sé que esto es similar a algunas preguntas anteriores, pero algo todavía no funciona para mí. ¿Cómo puede el siguiente comando:

curl -X POST --data @statements.json -H "Content-Type: application/json" --user username:password -H "x-experience-api-version: 1.0.0" https://MYLRS.waxlrs.com/TCAPI/statements

ser replicado en VBA?

Información extra:

Esto se relaciona con una tienda de registro de aprendizaje CAN CAN (xAPI) alojada llamada WaxLRS (por SaltBox). El ejemplo anterior proviene de aquí: http://support.saltbox.com/support/solutions/articles/1000083945-quick

Tengo una cuenta (cuenta de los usuarios sin costo, no se requiere CC para configurar) y he generado lo que creo que es la combinación de nombre de usuario y contraseña requerida. Las credenciales se denominan ''Identificador'' y ''Contraseña'' y aparecen bajo un título: Credenciales de autenticación básica .

No importa lo que haga, recibo un mensaje de error:

<html> <head><title>Unauthorized</title></head> <body> <h1>Unauthorized</h1> <p>This server could not verify that you are authorized to access the document you requested. Either you supplied the wrong credentials (e.g., bad password), or your browser does not understand how to supply the credentials required. <br/> <!-- --></p> <hr noshade> <div align="right">WSGI Server</div> </body> </html>

Creo que el ejemplo espera que la carga JSON se obtenga de un archivo, pero la estoy cargando en una cadena. No espero que esto contribuya al problema, he comparado mi cadena con el ejemplo provisto usando NP ++ Compare y coincide.

Mi código hasta ahora es:

url = "https://xxxxxxx.waxlrs.com/TCAPI/statements" Set pXmlHttp = CreateObject("WinHttp.WinHttpRequest.5.1") ''MSXML2.XMLHTTP") pXmlHttp.Open "POST", url, False pXmlHttp.setRequestHeader "Content-Type", "application/json" ''pXmlHttp.setRequestHeader "Authorization", "Basic xxxxxxt8wfB6JYerYCz:xxxxxx1FOd29J1s6G2" pXmlHttp.SetCredentials "xxxxxxt8wfB6JYerYCz", "xxxxxx1FOd29J1s6G2", 0 pXmlHttp.setRequestHeader "x-experience-api-version", "1.0.0" pXmlHttp.send (stringJSON) Set pHtmlObj = CreateObject("htmlfile") pHtmlObj.body.innerHTML = pXmlHttp.responseText apiWaxLRS = pXmlHttp.responseText

Preguntas / Respuestas que ayudaron:

  • Enviar una cadena JSON a un WS RESTful desde ASP clásico
  • https://stackoverflow.com/a/17063741/3451115
  • Cómo publicar datos JSON a través de HTTP API utilizando VBScript?

Pero todavía no sé cómo replicar la instrucción CURL en VBA