当前位置: 首页 > 知识库问答 >
问题:

Racket-无法检索Spotify访问令牌:“unsupported grant_type”

孟佑运
2023-03-14

我正在尝试获取Spotify API访问令牌。根据Spotify API站点的这些说明:

请求将包括请求正文中的参数:

    null
    null

生成:
{“access_token”:“ngcxrkc...mzyjw”,“token_type”:“bearer”,“expires_in”:3600,}

我正试图在这样的球拍中实现这一点:

http.rkt

#lang racket

(require net/http-client net/uri-codec)

(define (post hc endpoint data headers)
  (define data-encoded (alist->form-urlencoded data))
  (http-conn-send!
    hc endpoint
    #:method "POST"
    #:data data-encoded
    #:headers
      (list
        "Content-Type: application/x-www-form-urlencoded"
        (format "Content-Length: ~a" (string-length data-encoded))
        headers)))

(provide (all-defined-out))
#lang racket

(require
  net/base64 net/http-client net/url-connect
  racket/bytes racket/port
  "http.rkt")

(struct spotify-client (id secret))

(define (hc) (http-conn-open "accounts.spotify.com" #:ssl? #t))

(define (gen-access-token hc client)
  (let* ([credentials (string-append (spotify-client-id client) ":" (spotify-client-secret client))]
        [enc (bytes->string/utf-8 (base64-encode (string->bytes/utf-8 credentials)))]
        [auth (string-append "Authorization: Basic " enc)]
        [data (list (cons 'grant_type "client_credentials"))])
    (post hc "/api/token" data auth)
    (let-values ([(status-line header-list in-port) (http-conn-recv! hc)])
      (displayln (port->string in-port)))))

(provide (all-defined-out))
#lang racket

(require "client.rkt")

(let ([client (spotify-client "<client-id>" "<client-secret>")]
      [hc (hc)])
  (gen-access-token hc client))

这很奇怪,因为它告诉我,即使我的grant_type是client_credentials(请参见当我调用alist->form-urlencodeon(list(cons'grant_type“client_credentials”)))时,我的grant_type不受支持。是什么导致了这一切?

共有1个答案

邢博文
2023-03-14

更新:我无法使用Racket的HTTP库使代码工作,但当我切换到使用simple-http包时,它工作了:

(define spotify
  (update-headers
    (update-ssl
      (update-host json-requester "accounts.spotify.com") #t)
   (list
    "Content-Type: application/x-www-form-urlencoded"
    "Authorization: Basic ...")))
(define response (json-response-body (post spotify "/api/token" #:data "grant_type=client_credentials")))
(displayln (hash-ref response 'access_token))
 类似资料:
  • 我无法从Spotify获得Android应用的访问令牌,因为我可以连接到endpoint。 我需要我的Android应用程序的访问令牌,我尝试了以下方法:1)Spotify Android auth library。我找不到spotify auth版本。他们谈论的aar。2) 手动生成url。下面是一个例子: 当我尝试连接时,我得到了各种可能的错误:“缺少所需的参数:client_id”、“INV

  • 我试图使用请求模块向https://accounts.spotify.com/api/token发出POST请求,以便获得访问令牌。我已经用我的Spotify开发帐户注册了重定向URI。这是我的快速<代码>/重定向 路由。 有人能看到这里可能出了什么问题吗?每次我得到的都是一个不伦不类的“哎呀!出了问题”错误页面。

  • 我正在开发我的第一个Spotify应用程序,现在我正在处理授权过程。 到目前为止,我已经成功地从https://accounts.spotify.com/authorize 现在我通过PHP CURL request发送一个POST请求来获取我的访问令牌。 Spotify对此步骤的说明 我不断收到以下 JSON 错误响应,指示我的grant_type无效,它为我提供了三个有效的选项: {"erro

  • 以下是Spotify API的文档(我使用的是隐式授权流):https://beta . developer . Spotify . com/documentation/general/guides/authorization-guide/# Implicit-Grant-Flow 我正在尝试在Google表格中编写脚本。我专注于基本设置,但我似乎无法让访问令牌正常工作。 解决了的: 我目前收到以

  • 我已经看了几天Spotify api和示例源代码,但我仍然不知道如何获得访问令牌来访问用户的播放列表数据。我已经到了打开登录窗口,用户登录,然后我收到授权码的地步。此时,我尝试做如下事情: 和 但是不管怎样,我得到的结果是: 而不是代币。我肯定这很简单,但我不擅长JS。请帮忙!谢谢! (编辑)我忘了提: api认证指南链接:https://developer.spotify.com/web-api

  • 我目前还不熟悉使用php和Laravel以及使用API,但我一直在学习Spotify php教程https://github.com/jwilsson/spotify-web-api-php. 我还大胆地提出了一些我想问的问题,希望有人能帮忙。 我已经完成了所有步骤,但需要帮助才能让它正常工作。 将下面的代码放在它自己的文件中,我们称之为auth。php。将CLIENT_ID和CLIENT_SEC