SoundCloud JS SDK的SC.Get()返回401,如何配置OAuth Token到请求头?
问题排查结论
首先明确:这不是你的操作错误,也不是官方预期的正常行为,是你使用的3.3.2版本JavaScript SDK和SoundCloud最新的接口鉴权规则不兼容导致的。该版本SDK发布于官方推行OAuth Token通过请求头传递规则之前,默认会将鉴权Token拼接在URL的查询参数中,不符合当前接口的鉴权要求,因此返回401错误。
该版本SDK支持通过传参配置自定义请求头,具体修复方案如下。
修复方案
- 方案1:配置SDK全局请求头(无需修改SDK源码)
拿到OAuth授权返回的access_token后,先执行全局配置即可,原有调用逻辑不需要大幅调整:
// 原初始化逻辑保留 SC.initialize({ client_id: '你的客户端ID', // 其他原有初始化参数 }); // 拿到accessToken后追加全局鉴权头 SC.headers = { 'Authorization': `OAuth ${替换为实际拿到的accessToken变量}` }; // 原有SC.get调用不需要修改,注意不要在properties里传入oauth_token参数即可 var route='/me/activities' var properties = { limit: 50 }; SC.get(route, properties, function(data) { // 原有业务逻辑 })
- 方案2:自行封装HTTP请求绕开SDK内置方法
如果配置全局头不生效,可以直接不用SC.get方法,自己用原生fetch或其他请求库发起请求,兼容性更强:
const accessToken = '替换为实际拿到的accessToken'; fetch('https://api.soundcloud.com/me/activities?limit=50', { method: 'GET', headers: { 'Authorization': `OAuth ${accessToken}`, 'Accept': 'application/json' } }).then(res => res.json()).then(data => { // 原有业务逻辑 })
内容的提问来源于stack exchange,提问作者Egg
相关产品推荐
相关产品推荐

