我试图隐藏我的HTML5播放器的音频流的URL,并且真的很难想到这样做的方法然后我意识到,soundcloud必须隐藏其流的URL。所以我进入了soundcloud,打开了控制台并播放了一首曲目,但是我看不到隐藏URL的任何明显方式。在此之后,我看了一下DOM树,看看那里是否有任何类型的音频信息,但我一无所获!甚至没有播放器/音频的ID,所以我对soundcloud如何做到这一点非常困惑。
到目前为止,我已经尽可能地隐藏了音频网址。我在轨道的DOM中放置了一个ID,在单击播放按钮时获取了该ID,并从数据库中检索了该ID的URL。显而易见的问题是,任何有意愿的人都可以直接进入控制台并从网络事件中获取URL。
我并没有试图超越soundcloud的安全性来下载我不应该的曲目。我只是好奇他们是如何隐藏URL的。现在我也很好奇每个曲目是如何区分的,因为DOM中没有任何东西可以区分它们(不是我在简短的表面上找到的)。
那么,简而言之,是否有人对soundcloud如何实现这一目标或如何实现这一目标有任何想法?
答案 0 :(得分:20)
Soundcloud几乎是一个纯粹的JS网站。
正如你所说,没有加载HTML的歌曲的ID。歌曲被识别的方式是页面URL。这是通过。这个网址(示例):
https://api.sndcdn.com/resolve?url=https%3A//soundcloud.com/hoodinternet/joywave-tongues-hood-internet-remix&_status_code_map%5B302%5D=200&_status_format=json&client_id=YOUR_CLIENT_ID
返回如下内容:
{"status":"302 - Found","location":"https://api.soundcloud.com/tracks/100270342?client_id=YOUR_CLIENT_ID"}
接下来,它会从上面的JSON加载位置网址。这将返回有关该轨道的大量信息,包括:
stream_url: "https://api.soundcloud.com/tracks/100270342/stream"
然后加载此网址:
https://api.sndcdn.com/i1/tracks/100270342/streams?client_id=YOUR_CLIENT_IT
返回如下响应:
{"http_mp3_128_url":"https://ec-media.soundcloud.com/2gNVBYiZ06bU.128.mp3?ff61182e3c2ecefa438cd021sdf02d0e385713f0c1faf3b0339595664fe070de810d30a8e3a1186eda958909e9ed97799adfeceabc135efac83aee4271217a108450591db3b88\u0026AWSAccessKeyId=AKIAsdfJ4IAZE5EOIdsf7PA7VQ\u0026Expires=1374883403\u0026Signature=%2B1%2B7dfdfLN4NWP3C3bNF3gizSEVIU%3D"}
这就是他们隐藏流媒体网址的方式。唯一不明显的部分是他们通过点击带有URL作为参数的API来找到歌曲ID。在支持它的轨道上下载URL也可以这样做。
答案 1 :(得分:2)
如果您转到SoundCloud.com并打开调试器(Chrome就是我正在使用的)。看看"网络"选项卡,您将看到一个调用音频的脚本?anonymous_id #########。
这的结构类似于REST调用,这意味着它们将id传递给后端的服务,并以匿名方式返回音频输出。
答案 2 :(得分:0)