首页 > 解决方案 > 在 POST 请求中使用 VBA 传递 API 密钥和参数

问题描述

我一直在尝试围绕这个 VBA-Web 文档http://vba-tools.github.io/VBA-Web/docs/来解决问题,以便在发布请求中传递 auth_key 和其他参数。我理解编码 auth_key 的概念,如此处所述如何在 VBA 中传递 API 密钥以获取和发布请求?. 但我需要帮助才能在 VBA 中包含以下所有参数。

更新:我能够使下面的 QHarr 代码工作。但是我仍然发现很难在下面使用我自己的 curl 参数。我试过使用 EncodeBase64(apikey) 但我还没有。

Public Sub GetResults()
    Dim data As String, json As Object '<  VBE > Tools > References > Microsoft Scripting Runtime
    data = "{""domainNames"":[""google.com""]}"
    With CreateObject("WinHttp.WinHttpRequest.5.1")
        .Open "POST", "https://api.dev.name.com/v4/domains:checkAvailability", False
        .setRequestHeader "User-Agent", "Mozilla/5.0"
        .setRequestHeader "Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"
        .setRequestHeader "Authorization", "Basic " + _
            EncodeBase64("username" + ":" + "Token")
        .send data
        Set json = JsonConverter.ParseJson(.responseText)
        Dim result As Object
        For Each result In json("results")
            Debug.Print result("domainName")
        Next
    End With
End Sub



Function EncodeBase64(text As String) As String


  Dim arrData() As Byte
  arrData = StrConv(text, vbFromUnicode)

  Dim objXML As MSXML2.DOMDocument60
  Dim objNode As MSXML2.IXMLDOMElement

  Set objXML = New MSXML2.DOMDocument60
  Set objNode = objXML.createElement("b64")

  objNode.DataType = "bin.base64"
  objNode.nodeTypedValue = arrData
  EncodeBase64 = Application.Clean(objNode.text)

  Set objNode = Nothing
  Set objXML = Nothing
End Function

这是 API 文档 - https://cloud.ibm.com/apidocs/

功能要求:

curl -X POST \
-H "Content-Type: application/json" \
-u "apikey:{apikey}" \
-d @parameters.json \
"{url}/v1/analyze?version=2019-07-12"

示例参数:

{
  "features": {
    "semantic_roles": {}
  },
  "text": "IBM has one of the largest workforces in the world"
}

标签: jsonexcelvbaapipost

解决方案


推荐阅读