javascript - SoundCloud Api 重定向混淆和 Audio Api Streams

标签 javascript ajax cors soundcloud web-audio-api

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

这个有效:

http://matthiasdv.org/beta/

但并非总是如此……例如,当您搜索“Bonobo”时,您可以毫无问题地播放前几首轨道。但是,当您尝试播放“London Grammar - Hey Now (Bonobo remix)”(第 7 个结果)时,它不会播放。它不会抛出任何错误。

我一直在修补 Chrome 的网络开发工具,在网络选项卡下我看到了正在发出的请求。我发现确实播放的轨道有一个简短的请求 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 url 周围包裹一个快速的 encodeURI() 并没有奏效。

此外,我不明白这些网址是从哪里来的。在我的代码中,我将我的 ajax 请求指向,例如:

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

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

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

我决定无论如何都要问这个问题,因为我不明白上面的请求 Urls 是如何形成的,为什么会触发两个而不是一个请求,以及为什么第一个总是被取消。

任何解决播放问题的提示都非常受欢迎......

最佳答案

当您运行请求时

 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.comhttps://cf-media.sndcdn.com 时设置了访问控制 header 没有。这是服务器配置的问题,不幸的是,您无法从客户端控制任何内容。不知道这是否是 soundcloud 的蓄意举动,或者您是否可以向他们询问。

关于javascript - SoundCloud Api 重定向混淆和 Audio Api Streams,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30646525/

相关文章:

javascript - 递减进度条

javascript - Wordpress Ajax 返回 '0'

javascript - 如何获取单击元素的 ID 并将其存储在变量中并在进行 AJAX 调用的函数中使用它

c# - 请求的资源上不存在 'Access-Control-Allow-Origin' header 。因此不允许访问 Origin 'http://www.sitename.com,'

javascript - CORS 在 php slim 框架中不工作

django - 在 Django 中根据端点设置不同的 CORS 规则

javascript - 当某个类添加/删除到任何标签时,如何附加事件?

javascript - 更改窗口位置,然后等待窗口加载?

javascript - 我如何在两个数组上重复 AngularJs Ionic

javascript - jquery计算总金额但不显示