Axios POST状态400错误的请求

时间:2019-04-23 11:06:02

标签: httprequest axios http-status-code-400

我正在尝试向Spotify Web API发出POST请求。我正在使用这段代码:

axios.post(ACCESS_URL, {
    "grant_type": 'authorization_code',
    "code": code,
    "redirect_uri": REDIRECT_URI
},
    {
        headers: {
            "Authorization": "Basic " + Buffer.from(CLIENT_ID + ":" + CLIENT_SECRET).toString("base64"),
            'Content-Type': 'application/x-www-form-urlencoded'
        },
    })

code上方的代码段中是用户授权代码,其他所有内容都是服务器常量。问题是执行请求时出现以下错误:

 error: 'unsupported_grant_type',
        error_description: 'grant_type must be client_credentials, authorization_code or refresh_token' 

如您所见,我在请求正文中发送的授权类型是3种指定的授权类型之一,但我的状态仍然为400,我不知道为什么。有任何想法吗?

在此先感谢您,因为我确信这是一个愚蠢的问题,答案很简单,但我只是看不到

2 个答案:

答案 0 :(得分:0)

有关类似问题,请参见Unsupported grant type error when requesting access_token on Spotify API with Meteor HTTP

Spotify希望在查询字符串参数中而不是在发布请求正文中使用Grant_type。实际上,以上问题/答案中的配置看起来与axios配置非常相似。只需将前三个参数包装到params对象中即可:

axios.post(ACCESS_URL, {
 params: {
    "grant_type": 'authorization_code',
    "code": code,
    "redirect_uri": REDIRECT_URI
  },
  headers: {
    "Authorization": "Basic " + Buffer.from(CLIENT_ID + ":" + CLIENT_SECRET).toString("base64"),
    'Content-Type': 'application/x-www-form-urlencoded'
  }
})

答案 1 :(得分:0)

我找到了解决方案。我必须像这样使用return axios.post(ACCESS_URL,querystring.stringify({ "grant_type": 'authorization_code', "code": code, "redirect_uri": REDIRECT_URI }), {headers: { "Authorization": "Basic " + Buffer.from(CLIENT_ID + ":" + CLIENT_SECRET).toString("base64"), 'Content-Type': 'application/x-www-form-urlencoded' } } ) 编码数据:

{{1}}

感谢大家的帮助