为何Axios GET请求返回403错误,但在线REST测试工具可正常调用?
Axios请求Spotify API返回403,但在线工具和朋友使用同一Token正常
以下是几个可能的原因和对应的解决方法:
清理Token中的隐藏字符
你通过getSpotifyToken()获取的Token可能包含空格、换行符这类不可见字符,在线工具粘贴时会自动过滤,但Axios会原样带入请求头。可以在代码中添加清理步骤:const spotifyToken = getSpotifyToken().trim();也可以把console.log输出的Token复制到文本编辑器,检查是否有多余的空白字符。
显式控制Axios请求头
Axios会自动添加一些默认请求头(比如User-Agent、Accept),部分API对这些头的格式敏感。可以显式指定必要的请求头,禁用默认的自动添加:const response = await axios.get(api_url, { headers: { Authorization: `Bearer ${spotifyToken}`, Accept: "application/json", "Content-Type": "application/json", }, transformRequest: [(data) => data], // 避免Axios默认的请求转换逻辑 });检查React Native的网络配置
- iOS:确认
Info.plist中的ATS(App Transport Security)配置允许访问api.spotify.com。如果项目有ATS域名白名单,需要将该域名加入列表。 - Android:检查
AndroidManifest.xml是否声明了网络权限<uses-permission android:name="android.permission.INTERNET" />,同时查看res/xml/network_security_config.xml是否限制了HTTPS请求的域名。
- iOS:确认
对齐Axios版本
不同版本的Axios在请求构造、头处理逻辑上可能存在差异。查看朋友项目package.json中的Axios版本,在你的项目中安装相同版本:npm install axios@x.x.x(将
x.x.x替换为朋友使用的具体版本号)验证Token的有效性与权限
虽然你说在线工具可用,但仍需确认当前Token确实包含user-top-read权限,且所属账号正确。可以调用Spotify的用户信息接口验证:const validateToken = async () => { try { const res = await axios.get("https://api.spotify.com/v1/me", { headers: { Authorization: `Bearer ${spotifyToken}` } }); console.log("Token所属用户:", res.data.display_name); } catch (err) { console.log("Token验证失败:", err); } };
内容的提问来源于stack exchange,提问作者songexile9
相关产品推荐
相关产品推荐

