【问题标题】:Using VBA for a POST request to the Spotify Accounts service via REST API使用 VBA 通过 REST API 向 Spotify Accounts 服务发送 POST 请求
【发布时间】:2016-11-11 12:50:42
【问题描述】:

我正在尝试从我的 spotify 帐户中检索数据并将其放入 Excel 表中。我想创建一些 VBA 代码来使用 Spotify Web Api 访问数据。

我关注了Spotify Web API Authorization Guide,但是当我尝试请求访问令牌时我被卡住了。我必须向 Spotify Accounts 服务发出 POST 请求,但显然我做错了什么。

我正在使用“WinHttp.WinHttpRequest.5.1”来执行发布请求。这是部分代码

Set HttpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
HttpRequest.Open "POST", "https://accounts.spotify.com/api/token"
HttpRequest.SetRequestHeader
HttpRequest.SetRequestHeader "Authorization", "Basic " & strClient_secret
HttpRequest.Send ("grant_type=authorization_code&code=" & strCode & "&redirect_uri=http://www.js76.nl/diskkoffer/")

响应文本显示“糟糕!出了点问题,请重试或查看我们的帮助区域。”,但我不知道出了什么问题。我对这些 http 请求没有任何经验。

字符串strClient_secret和strCode填充在程序的另一部分。

谁能帮我解决这个问题?

【问题讨论】:

    标签: vba rest spotify


    【解决方案1】:

    我没有 spotify 帐户,所以不确定用户名密码。但是他们的文档说他们有 REST 实现,因此您的凭据需要进行 64 位编码。

    在这行HttpRequest.SetRequestHeader "Authorization", "Basic " & strClient_secret

    变量strClient_secret 需要进行 64 位编码。

    所以尝试添加这样的功能,同时用正确的用户名和密码替换占位符。

    Private Function EncodeBase64() As String
        arrData = StrConv(<<YOUR_SPOTIFY_USERID>> & ":" & <<YOUR_SPOTIFY_USERPASS>>, vbFromUnicode)
    
        Set objXML = New MSXML2.DOMDocument
        Set objNode = objXML.createElement("b64")
    
        objNode.DataType = "bin.base64"
        objNode.nodeTypedValue = arrData
        EncodeBase64 = objNode.text
    
        Set objNode = Nothing
        Set objXML = Nothing
    End Function
    

    然后将上面的行更改为: HttpRequest.SetRequestHeader "Authorization", "Basic " &amp; EncodeBase64

    在这里查看 REST 和 VBA:http://ashuvba.blogspot.com/2014/08/excel-vba-json-rest-with-jira-json-is.html

    希望它能让你走上正确的路线。

    【讨论】:

    • 您需要参考 MSXML2 吗?
    • 是的,你做到了。除非你想使用后期绑定。
    • 感谢 cyboashu 为您解答。我认为它让我走上了正确的道路,但我还没有到达那里。我设法对用户名/密码进行编码。起初输出包含 2 行,这给了我错误 5“无效的过程调用或参数”。当我删除“换行符”时,错误消失了,但我仍然收到 Spotify 错误页面作为响应文本。
    • 后来我在 Spotify 文档中读到“发送客户端 ID 和机密的另一种方法是在 POST 正文中作为请求参数(client_id 和 client_secret),而不是在标头中发送 base64 编码."。我也尝试过,发送不带标题的请求,并在正文中使用用户名/密码。但不幸的是,同样的响应文本显示“糟糕!出了点问题”......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多