You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Curl请求转为Axios调用Spotify API时遇415/401错误求助

解决NestJS中Axios调用Spotify API获取Token的415/401错误

问题根源

  1. 415错误:你的curl命令发送的是application/x-www-form-urlencoded格式的表单数据,但Axios默认会把JavaScript对象序列化为JSON发送,Spotify的token接口不支持JSON格式的请求体,因此返回415(Unsupported Media Type)。
  2. 401错误:虽然curl里把client_id和client_secret放在表单参数里能生效,但Spotify官方推荐用Basic Auth方式认证,表单传密钥的方式在Axios格式错误的情况下会触发权限验证失败。

修复代码

修改你的getLikedSongs方法,按以下方式调整:

import axios from 'axios';
import { URLSearchParams } from 'url'; // Node.js内置模块,无需额外安装

@Get('liked-songs')
async getLikedSongs(@Query('code') code: string) {
  console.log('code : ', code);
  const CLIENT_ID = '{MY_CLIENT_ID}';
  const CLIENT_SECRET = '{MY_CLIENT_SECRET}';
  const REDIRECT_URI = '{MY_REDIRECT_URI}';

  // 构建表单格式的请求体
  const params = new URLSearchParams();
  params.append('grant_type', 'authorization_code');
  params.append('code', code);
  params.append('redirect_uri', REDIRECT_URI);
  params.append('scope', 'user-library-read');

  // 生成Basic Auth的认证头
  const authHeader = Buffer.from(`${CLIENT_ID}:${CLIENT_SECRET}`).toString('base64');

  try {
    const response = await axios.post('https://accounts.spotify.com/api/token', params, {
      headers: {
        'Authorization': `Basic ${authHeader}`
      }
    });
    console.log('Access token:', response.data.access_token);
    const accessToken = response.data.access_token;
    // 后续可使用accessToken调用获取喜欢歌曲的接口
    return { accessToken };
  } catch (error) {
    console.error('Error fetching access token:', error.response?.data || error.message);
    throw error; // 交由NestJS处理错误并返回给前端
  }
}

关键修改点

  • 使用URLSearchParams构建请求体,确保数据为表单格式,Axios会自动匹配正确的Content-Type。
  • 采用Basic Auth认证:将client_id和client_secret用冒号拼接后做base64编码,放在Authorization请求头中,这是Spotify API推荐的安全认证方式。
  • 改用async/await替代then/catch,符合NestJS异步处理规范,同时避免变量作用域问题。

额外验证点

  • 确认REDIRECT_URI与Spotify开发者后台配置的完全一致(包括协议、域名、路径,不能有多余斜杠)。
  • 确认code为有效的授权码,且未被使用过(授权码仅能使用一次)。

内容的提问来源于stack exchange,提问作者Alexandre Boucard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 13:55:09