【问题标题】:Problem sending web API to Spotify using Laravel and Guzzle package使用 Laravel 和 Guzzle 包将 Web API 发送到 Spotify 时出现问题
【发布时间】:2021-08-15 12:25:34
【问题描述】:

我正在尝试使用 Web API 与 Spotify 进行通信。 这就是这种情况。为了从 Spotify 检索任何信息,首先我需要获得 Spotify 的授权。为此,我需要向 https://accounts.spotify.com/api/token 发送一个包含授权凭据(包含 client_id 和 client_secret)的发布请求,然后作为响应,我应该收到一个访问令牌,稍后我将使用它来检索任何其他信息。 以下是有关其工作原理的快速 Spotify 文档:

所以这里的问题是我正在做我应该做的一切,但我没有得到令牌作为响应。

这是我在 laravel 中使用 Guzzle 包的代码:

而不是访问令牌作为响应,这个 HTML 输出是我从 Spotify 收到的作为回报(没有任何关于问题的进一步信息和任何错误代码):

【问题讨论】:

    标签: laravel api oauth authorization guzzle


    【解决方案1】:

    您可能误解了这一行吗?

    Authorization: Basic <base64 encoded client_id:client_secret>
    

    看起来你正在这样做:

    base64_encode($client_id) . ":" . base64_encode($client_secret)
    

    但也许他们想要这个:

    base64_encode($client_id . ":" . $client_secret);
    

    也就是说,假设您对它们进行了 base 64 编码,因为这实际上并未显示在您的代码中。


    此外,文档声明它需要application/x-www-form-urlencoded 编码。

    # 发送表单 URL 编码请求
    https://laravel.com/docs/8.x/http-client#sending-form-url-encoded-requests

    为满足此要求,您可能需要在请求中添加asForm()

    $response = Http::withHeaders(...)->asForm()->post(...);
    

    【讨论】:

    • 这是一个公平的观点。我已经尝试过了,但仍然出现该错误。
    • 我已添加到我的答案中。如果这有帮助,请告诉我。
    • 没错!发送正文参数 asForm() 是解决方案。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 2020-12-26
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-08
    • 2019-08-08
    相关资源
    最近更新 更多