Post 请求 Microsoft 图 API
Post request to Microsoft graph API
我正在尝试使用 vba 代码请求访问令牌。将我在 VBA 中提供的所有参数放入 postman 时,我得到一个访问令牌没有问题,但是在 VBA 代码中使用它时会出现错误
"the request body must contain the following parameter: 'grant_type'"
Dim objRequestGetToken As Object, JSONGetToken As Object
Dim strUrlGetToken As String, strClientID As String, strClientSecret As String, strResource As String, strBody As String
Dim blnAsyncGetToken As Boolean
strClientID = "XXX"
strClientSecret = "XXX"
strRecourse = "00000003-0000-0ff1-ce00-000000000000/XXX.sharepoint.com@XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
strBody = "{""grant_type"":""client_credentials"",""client_id"":""" & strClientID & """,""client_secret"":""" & strClientSecret & """,""resource"":""" & strRecourse & """}"
Set objRequestGetToken = CreateObject("MSXML2.XMLHTTP.6.0")
strUrlGetToken = "https://accounts.accesscontrol.windows.net/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/tokens/OAuth/2/"
blnAsyncGetToken = False
Debug.Print strBody
With objRequestGetToken
.Open "POST", strUrlGetToken, blnAsyncGetToken
.SetRequestHeader "Content-Type", "application/json;odata=verbose"
.SetRequestHeader "Accept", "application/json;odata=verbose"
.send strBody
'spin wheels whilst waiting for response
While objRequestGetToken.readyState <> 4
DoEvents
Wend
Set JSONGetData = JsonConverter.ParseJson(objRequestGetToken.ResponseText)
End With
Debug.Print objRequestGetToken.ResponseText
我知道这可能是 的重复请求,但我不明白为什么我的正文没有正确发送,而且前面提到的 post 似乎没有帮助。
post人工请求:
如有任何帮助,我们将不胜感激!
编辑:这是使它最终起作用的代码:)
Dim objRequestGetToken As Object, JSONGetToken As Object
Dim strUrlGetToken As String, strClientID As String, strClientSecret As String, strResource As String, strBody As String
Dim blnAsyncGetToken As Boolean
strClientID = "XXX"
strClientSecret = "XXX"
strRecourse = "00000003-0000-0ff1-ce00-000000000000/XXX.sharepoint.com@XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
strBody = "{""grant_type"":""client_credentials"",""client_id"":""" & strClientID & """,""client_secret"":""" & strClientSecret & """,""resource"":""" & strRecourse & """}"
Set objRequestGetToken = CreateObject("MSXML2.XMLHTTP.6.0")
strUrlGetToken = "https://accounts.accesscontrol.windows.net/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/tokens/OAuth/2/"
blnAsyncGetToken = False
Debug.Print strBody
With objRequestGetToken
.Open "POST", strUrlGetToken, blnAsyncGetToken
.SetRequestHeader "application", "x-www-form-urlencoded"
.SetRequestHeader "Accept", "application/json;odata=verbose"
.send strBody
'spin wheels whilst waiting for response
While objRequestGetToken.readyState <> 4
DoEvents
Wend
Set JSONGetData = JsonConverter.ParseJson(objRequestGetToken.ResponseText)
End With
Debug.Print objRequestGetToken.ResponseText
strBody = "grant_type=client_credentials&client_id=" & strClientID & "&client_secret=" & strClientSecret & "&resource=" & strRecourse
并将 header 更改为 x-www-form-urlencoded
With objRequestGetToken
.Open "POST", strUrlGetToken, blnAsyncGetToken
.SetRequestHeader "application", "x-www-form-urlencoded"
.SetRequestHeader "Accept", "application/json;odata=verbose"
.send strBody
'spin wheels whilst waiting for response
While objRequestGetToken.readyState <> 4
DoEvents
Wend
Set JSONGetData = JsonConverter.ParseJson(objRequestGetToken.ResponseText)
End With
应该可以解决问题。
我正在尝试使用 vba 代码请求访问令牌。将我在 VBA 中提供的所有参数放入 postman 时,我得到一个访问令牌没有问题,但是在 VBA 代码中使用它时会出现错误
"the request body must contain the following parameter: 'grant_type'"
Dim objRequestGetToken As Object, JSONGetToken As Object
Dim strUrlGetToken As String, strClientID As String, strClientSecret As String, strResource As String, strBody As String
Dim blnAsyncGetToken As Boolean
strClientID = "XXX"
strClientSecret = "XXX"
strRecourse = "00000003-0000-0ff1-ce00-000000000000/XXX.sharepoint.com@XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
strBody = "{""grant_type"":""client_credentials"",""client_id"":""" & strClientID & """,""client_secret"":""" & strClientSecret & """,""resource"":""" & strRecourse & """}"
Set objRequestGetToken = CreateObject("MSXML2.XMLHTTP.6.0")
strUrlGetToken = "https://accounts.accesscontrol.windows.net/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/tokens/OAuth/2/"
blnAsyncGetToken = False
Debug.Print strBody
With objRequestGetToken
.Open "POST", strUrlGetToken, blnAsyncGetToken
.SetRequestHeader "Content-Type", "application/json;odata=verbose"
.SetRequestHeader "Accept", "application/json;odata=verbose"
.send strBody
'spin wheels whilst waiting for response
While objRequestGetToken.readyState <> 4
DoEvents
Wend
Set JSONGetData = JsonConverter.ParseJson(objRequestGetToken.ResponseText)
End With
Debug.Print objRequestGetToken.ResponseText
我知道这可能是
post人工请求:
如有任何帮助,我们将不胜感激!
编辑:这是使它最终起作用的代码:)
Dim objRequestGetToken As Object, JSONGetToken As Object
Dim strUrlGetToken As String, strClientID As String, strClientSecret As String, strResource As String, strBody As String
Dim blnAsyncGetToken As Boolean
strClientID = "XXX"
strClientSecret = "XXX"
strRecourse = "00000003-0000-0ff1-ce00-000000000000/XXX.sharepoint.com@XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
strBody = "{""grant_type"":""client_credentials"",""client_id"":""" & strClientID & """,""client_secret"":""" & strClientSecret & """,""resource"":""" & strRecourse & """}"
Set objRequestGetToken = CreateObject("MSXML2.XMLHTTP.6.0")
strUrlGetToken = "https://accounts.accesscontrol.windows.net/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/tokens/OAuth/2/"
blnAsyncGetToken = False
Debug.Print strBody
With objRequestGetToken
.Open "POST", strUrlGetToken, blnAsyncGetToken
.SetRequestHeader "application", "x-www-form-urlencoded"
.SetRequestHeader "Accept", "application/json;odata=verbose"
.send strBody
'spin wheels whilst waiting for response
While objRequestGetToken.readyState <> 4
DoEvents
Wend
Set JSONGetData = JsonConverter.ParseJson(objRequestGetToken.ResponseText)
End With
Debug.Print objRequestGetToken.ResponseText
strBody = "grant_type=client_credentials&client_id=" & strClientID & "&client_secret=" & strClientSecret & "&resource=" & strRecourse
并将 header 更改为 x-www-form-urlencoded
With objRequestGetToken
.Open "POST", strUrlGetToken, blnAsyncGetToken
.SetRequestHeader "application", "x-www-form-urlencoded"
.SetRequestHeader "Accept", "application/json;odata=verbose"
.send strBody
'spin wheels whilst waiting for response
While objRequestGetToken.readyState <> 4
DoEvents
Wend
Set JSONGetData = JsonConverter.ParseJson(objRequestGetToken.ResponseText)
End With
应该可以解决问题。