一尘不染

SoundCloud Api重定向混乱和音频Api流

ajax

我正在尝试向SoundCloud API发出请求。然后,当我得到响应时,将stream_url设置为

这有效:

http://matthiasdv.org/beta/

但并非总是如此…例如,当您搜索“
Bo黑猩猩”时,您可以播放前几首曲目而不会出现任何问题。但是当您尝试演奏“伦敦语法-嘿,现在(bo黑猩猩混音)”时-第七名结果-
它不会播放。它不会抛出任何错误。

我一直在修改Chrome的webdev工具,并在“网络”标签下看到正在发出的请求。我发现DO播放的曲目有一个简短的Request Url,如下所示:

https://ec-media.sndcdn.com/vR5ukuOzyLbw.128.mp3?f10880d39085a94a0418a7ef69b03d522cd6dfee9399eeb9a522029f6bfab939b9ae57af14bba24e44e1542924c205ad28a52352010cd0e7dd461e9243ab54dc0f0bba897d

和那些看起来不是这样的:

https://cf-media.sndcdn.com/8PCswwlkswOd.128.mp3?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiKjovL2NmLW1lZGlhLnNuZGNkbi5jb20vOFBDc3d3bGtzd09kLjEyOC5tcDMiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0MzM0Mjc2MDN9fX1dfQ__&Signature=cD-XVhnvQnIATkfrBDDVy0Q7996C8DymwxRLwBBduab0~L0MynF1ftcMky~21T8Q-gCZ2~dMK8dz7uVxvJTIJgXPxEZvhNtbvescMK6iFMg-xSAty-4OhJYjrIZJ2j8NE4uNA4Ml7MWbWcQw4KtUtpZitOQuguS3DPFDII3VF-dvzb2L~xG-G8Uu3uOnI1WhnAAfhf1QWMO7swwB89HtcCiuVBmfluG28ELrJEq-au8mqIMB3sLTno6nUuTtpHXR2ayXBsYcYLLJVXa3Ul8p1rhLS5XWHKWXY8xug4jwey27~C5PVAomK6Z5lJx-mz-0zYs4riUYtl0zACbZ1OfwTQ__&Key-Pair-Id=APKAJAGZ7VMH2PFPW6UQ

现在,乍一看,我认为这是一个编码问题,但是在ajax网址周围包裹一个快速encodeURI()无效。

此外,我不明白这些网址来自何处。在我的代码中,我将ajax请求定向到例如:

https://api.soundcloud.com/tracks/140326936/stream?client_id=5c6ceaa17461a1c79d503b345a26a54e

因此,GET请求中的请求网址(在Chrome的webdev工具的“网络”下可以找到)对我来说毫无意义。SoundCloud是否将获取请求重定向到CDN主机?我注意到的另一件事是,每次触发两个请求而不是一个。第一个始终被取消,并包含“显示临时标头”警告。我相信这是因为我正在设置crossOrigin
=“ anonymous”,否则某些浏览器将不会加载内容。

我猜可能会导致问题的是,当将url设置为元素的src属性时,在Dancer.js库中会触发evenListener,该库将处理音频Api和回放(https://github.com/jsantell
/dancer.js/)。可能是库中某处需要encodeURI()。

我决定以任何方式提出问题,因为我不理解上面的Request Urls的形成方式,为什么触发了两个而不是一个请求,为什么总是取消第一个请求。

我解决回放问题的任何提示也非常受欢迎…


阅读 293

收藏
2020-07-26

共1个答案

一尘不染

当您运行请求

 https://api.soundcloud.com/tracks/140326936/stream?client_id=5c6ceaa17461a1c79d503b345a26a54e

您会从服务器收到HTTP 302
Found响应,这是URL重定向(http://en.wikipedia.org/wiki/HTTP_302)。这将导致您的浏览器从服务器返回的新URL加载,从而看到两个请求。服务器基本上说“是的,我知道在哪里可以找到该文件,请那边的那个人”。

我想,一个起作用而另一个不起作用的原因是https://ec-media.sndcdn.com设置了访问控制标头,而https://cf-media.sndcdn.com却没有。这是服务器配置的问题,不幸的是,您无法从客户端进行任何控制。Dunno,这是Soundcloud的有意举动,还是您可以向他们询问的内容。

2020-07-26