如何从VBA中的RESTful API获得响应?
这是我第一次尝试从VBA代码调用RESTAPI API文档位于。我尝试使用PDF第8页上的示例,只是为了确保一切正常,但不提供如何从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
位置
参数,因为我还不知道他们为我们分配了什么号码。文档的第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