如何从VBA中的RESTful API获得响应?

如何从VBA中的RESTful API获得响应?,vba,rest,Vba,Rest,这是我第一次尝试从VBA代码调用RESTAPI API文档位于。我尝试使用PDF第8页上的示例,只是为了确保一切正常,但不提供位置参数,因为我还不知道他们为我们分配了什么号码。文档的第55页规定,关闭此参数将返回所有位置,这正是我目前想要的 我已经把这段代码放在一起,这似乎让我连接起来,但我似乎没有得到文档承诺的结果 Public Sub RESTtest() Dim URL As String URL = "https://ws.appointment-plus.com" Di

这是我第一次尝试从VBA代码调用RESTAPI

API文档位于。我尝试使用PDF第8页上的示例,只是为了确保一切正常,但不提供
位置
参数,因为我还不知道他们为我们分配了什么号码。文档的第55页规定,关闭此参数将返回所有位置,这正是我目前想要的

我已经把这段代码放在一起,这似乎让我连接起来,但我似乎没有得到文档承诺的结果

Public Sub RESTtest()

  Dim URL As String
  URL = "https://ws.appointment-plus.com"

  Dim locationsURL As String
  locationsURL = "/Locations/GetLocations"

  Dim siteID As String
  siteID = "myID"
  Dim APIKey As String
  APIKey = "myKey"
  Dim restRequest As WinHttp.WinHttpRequest
  Set restRequest = New WinHttp.WinHttpRequest
  Dim restResult As String

  With restRequest
    .Open "POST", URL & locationsURL, True
'    .Open "GET", URL & locationsURL, True
    .setRequestHeader "Authorization", "Basic " & siteID & ":" & APIKey
    .setRequestHeader "response_type", "xml"
    .setRequestHeader "Accept-Encoding", "application/xml"
    .Send
    .waitForResponse
    Debug.Print ".ResponseText: " & .ResponseText
    Debug.Print ".Status: " & .Status
    Debug.Print ".StatusText: " & .StatusText
    Debug.Print ".ResponseBody: " & .ResponseBody
  End With

End Sub
GET
为我提供以下输出:

.ResponseText: <p>Welcome to the Appointment-Plus RESTful Web Service/API.</p><p><strong>ws.appointment-plus.com</strong></p>
.Status: 200
.StatusText: OK
.ResponseBody: ???????????????????????????????????????????????????????
在这两种情况下,我的状态都是200,似乎是
OK
,所以电话似乎工作正常

通过查看
WinHttp.WinHttpRequest
,我发现有一个
.ResponseStream
,它看起来很可能是获取响应的完整XML的候选对象,但是,它返回一个IStream,我还没有弄清楚如何在VBA中处理它

.ResponseStream
是获得API调用完整结果的正确属性吗?如果是,我需要在我的项目中包含什么才能处理它

更新

根据我从供应商处收到的反馈:

我建议他使用Basic Auth而不是Strong,并确保在请求/头中发送API密钥和SiteID。邮递员做得很好。。我还建议POST方法和参数应该在Postman的Body区域中传递(下面的屏幕截图)

我通过邮递员通过以下设置实现了此功能:

如何将其转换为上面的代码?我用块修改了
,如下所示:

  With restRequest
'    .Open "POST", URL & method, True
    .Open "GET", URL & method, True
    .setRequestHeader "Authorization", "Basic " & siteID & ":" & APIKey
'    .setRequestHeader "response_type", "xml"
'    .setRequestHeader "Accept-Encoding", "gzip, deflate, br"
    .Option(WinHttpRequestOption_EnableRedirects) = False
    .Send "{""response_type"":""xml""}"
    .waitForResponse
    Debug.Print ".ResponseText: " & .ResponseText
    Debug.Print ".Status: " & .Status
    Debug.Print ".StatusText: " & .StatusText
    Debug.Print ".ResponseBody: " & .ResponseBody
  End With
  • 据我所知,我从一开始就在使用Basic auth,不是Strong,但是,我在这方面是新手
  • 我把
    响应类型
    移到了身体上,我想
  • 我再次尝试了
    POST
    GET
    ,但仍然得到了与上周完全相同的结果。邮递员将使用
    POST
    返回有效的结果,但是
    GET
    会准确地返回我的代码得到的结果
  With restRequest
'    .Open "POST", URL & method, True
    .Open "GET", URL & method, True
    .setRequestHeader "Authorization", "Basic " & siteID & ":" & APIKey
'    .setRequestHeader "response_type", "xml"
'    .setRequestHeader "Accept-Encoding", "gzip, deflate, br"
    .Option(WinHttpRequestOption_EnableRedirects) = False
    .Send "{""response_type"":""xml""}"
    .waitForResponse
    Debug.Print ".ResponseText: " & .ResponseText
    Debug.Print ".Status: " & .Status
    Debug.Print ".StatusText: " & .StatusText
    Debug.Print ".ResponseBody: " & .ResponseBody
  End With