如何在VBA中实现moodle数据库的REST(ful)API



我正在尝试使用VBA-code处理来自我们学校MS-Access数据库的moodle数据,以发布xml.objects,我也成功地将其用于与Telegram(信使服务(通信的API。

我尝试从一个示例中实现以下代码,以便在我的VBA代码中使用RESTful-API:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -H "Accept: application/json" -H 'Authorization: {token}' -d'options[ids][0]=6' "https://localhost/webservice/restful/server.php/core_course_get_courses"

这就是我的VBA代码的样子:

Private Sub btnTestMoodleApi_Click()
Dim objRequest As Object
Dim strResult As String
Dim strPostData As String
Dim strURL As String
Dim strToken As String
Set objRequest = CreateObject("MSXML2.XMLHTTP")
strURL = xxx
strToken = xxx
strPostData = "options[ids][0]=432"
With objRequest
.Open "POST", strURL & "/webservice/restful/server.php?wstoken={" & strToken & "}/core_course_get_courses"
.setRequestHeader "Content-Type", " application/x-www-form-urlencoded"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "Authorization", "{strToken}"
.Send (strPostData)
strResult = .responseText
Debug.Print strResult
End With
End Sub

我在MS Access中得到的错误对我来说相当无用(也改变了以下描述的一些方面并没有改变错误消息(:

&quot-运行时错误2147483638:完成此操作所需的数据尚未可用

我怀疑以下错误源:

a( 我认为"-H〃;意思是标题,但是";。setRequestHeader";方法只接受一个变量和值。我想也许我可以用几次。但我不确定这是否有效,也不确定我如何在xml.object.中声明一个头

b( 我想"-d";意思是数据,我不知道该怎么处理它,所以我把它放进了.send((方法中。我认为这就是html正文的位置。我可能完全错了。。。

c( 我将API的令牌嵌套到URL中,因为我在另一个示例中看到它是这样的。然而,moodle插件的原始说明在URL中没有令牌(仅在授权标头中(。我尝试了两种方法,但都不起作用。。。

如果有人能帮助我,如何在vba代码中实现API指令,或者至少为我指明正确的方向,我将非常高兴。事实上,我并不真的需要这个特定的核心功能,而是更复杂的功能来创建课程等。但我认为最好从一个简单的例子开始,因为我对API/xml/php/html等不太了解

感谢阅读

Arndt David

如果数据还不可用,等待结果的循环似乎有效

While objRequest.readyState <> 4
DoEvents
Wend

此外,通过vba访问Web服务。另一个问题是Authorization Header的实现,这可能是一个格式问题,我将在另一篇文章中澄清。

最新更新