簡體   English   中英

將請求發布到 Microsoft graph API

[英]Post request to Microsoft graph API

我正在嘗試使用 vba 代碼請求訪問令牌。 將我在 VBA 中提供的所有參數放入 postman 時,我得到一個訪問令牌沒問題,但是在 VBA 代碼中使用它時會出現錯誤

“請求正文必須包含以下參數:'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

我知道這可能是VBA 后方法請求正文(“MSXML2.XMLHTTP”)的重復請求:解析 JSON 時出錯:^ 期待 '{' 或 '['但我不知道為什么我的正文沒有正確發送前面提到的帖子似乎沒有幫助。

postman 請求: 在此處輸入圖像描述在此處輸入圖像描述

任何形式的幫助將不勝感激!

編輯:這是使它最終工作的代碼:)

    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

應該解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM