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