vba web json



CURL Équivalent aux données POST JSON en utilisant VBA (1)

Essayez de faire une autorisation de base comme indiqué dans l'exemple ci-dessous:

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

Je sais que c'est similaire à certaines questions posées précédemment, mais quelque chose ne fonctionne toujours pas pour moi. Comment peut la commande suivante:

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

être répliqué dans VBA?

Informations supplémentaires:

Cela se rapporte à un magasin d'enregistrement d'apprentissage TIN CAN hébergé (xAPI) appelé WaxLRS (par SaltBox). L'exemple ci-dessus vient d'ici: http://support.saltbox.com/support/solutions/articles/1000083945-quick

J'ai un compte (compte de tinkerers libre, aucun CC requis pour installer) et ai généré ce que je crois être la combinaison requise de nom d'utilisateur et de mot de passe. Les informations d'identification sont appelées «Identifiant» et «Mot de passe» et apparaissent sous un titre: Informations d'authentification de base .

Peu importe ce que je fais, je reçois un message d'erreur:

<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>

Je crois que l'exemple s'attend à ce que la charge utile JSON soit obtenue à partir d'un fichier, mais je le charge dans une chaîne. Je ne m'attends pas à ce que cela contribue au problème, j'ai comparé ma chaîne avec l'exemple fourni en utilisant NP ++ Compare et ça correspond.

Mon code jusqu'à présent est:

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

Questions / réponses qui ont aidé:

  • Envoyer une chaîne JSON à un WS RESTful à partir de Classic ASP
  • https://stackoverflow.com/a/17063741/3451115
  • Comment POSTER des données JSON via l'API HTTP à l'aide de VBScript?

Mais, je suis toujours à une perte quant à la façon de répliquer l'instruction CURL dans VBA





vb6