Как soundcloud скрывает URL потокового аудио
Я пытаюсь скрыть URL-адрес моих аудиопотоков для своего проигрывателя HTML5 и действительно стараюсь думать о том, как это сделать, и тогда я понял, soundcloud должен скрывать URL их потоков. Поэтому я пошел в soundcloud, открыл консоль и сыграл трек, но я не видел никакого очевидного способа, чтобы URL был скрыт. После этого я взглянул на дерево DOM, чтобы узнать, есть ли там какая-либо аудиоинформация, но я ничего не нашел! Там даже нет ID для проигрывателя/аудио, поэтому я очень смущен тем, как это звучит.
Теперь я сделал все возможное, чтобы до сих пор скрывать аудио URL. Я поместил идентификатор в DOM для дорожки, получил этот идентификатор, когда нажата кнопка воспроизведения, и вытащил URL-адрес этого идентификатора из базы данных. Очевидная проблема заключается в том, что любой желающий может просто перейти на консоль и получить URL-адрес от сетевых событий.
Я не пытаюсь пробить прошлую защиту звука, чтобы скачивать треки, которых я не должен был. Мне просто интересно, как они скрыли URL. Теперь мне также любопытно, как различают каждый трек, поскольку ничто в DOM не различает их (не то, что я нашел на моем краткий взгляд).
Итак, словом, есть ли у кого-нибудь какие-либо идеи о том, как soundcloud достиг этого и как это можно достичь?
Ответы
Ответ 1
Soundcloud - довольно чистый сайт JS.
Как вы сказали, нет идентификатора песни, загруженной HTML. Способ распознавания песен определяется URL-адресом страницы. Это делается через. этот 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"}
Затем он загружает URL-адрес местоположения, начиная с JSON. Это возвращает кучу информации о треке, в том числе:
stream_url: "https://api.soundcloud.com/tracks/100270342/stream"
Затем он загружает этот URL-адрес:
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 с URL-адресом в качестве параметра. То же самое можно сделать с URL-адресом загрузки на дорожках, которые его поддерживают.
Ответ 2
Если вы получили SoundCloud.com и откройте свой отладчик (Chrome - это то, что я использую). Посмотрите на вкладку "Сеть", и вы увидите звуковой вызов script? Anonymous_id #########.
Это структурировано как вызов REST, означающий, что они передают идентификатор службе на своем бэкэнд, и который анонимно возвращает аудиовыход.
Ответ 3
Они изменили адрес медиацентра, и теперь они транслируются из ссылки, как показано ниже. Но доступ к этому URL-адресу ограничен.
https://cf-media.sndcdn.com/Exbr0RDsakIP.128.mp3?Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiKjovL2NmLW1lZGlhLnNuZGNkbi5jb20vRXhicjBSRHNha0lQLjEyOC5tcDMiLCJDb25kaXRpb24iOnsiRGF0ZUxlc3NUaGFuIjp7IkFXUzpFcG9jaFRpbWUiOjE0NzgyOTg5NTV9fX1dfQ__&Signature=niisPQ5NHUqclFI9Mb-eH1BJvOC~0zUZme8CLMkocXMs2zCWe2U2~chPYDydJuYYV3iFtUjqwCK~t~~kQg2o5TKx0~iUSZ1E4ZNBbhvHJWqBliILbEd2gZzBnrHtS0nBNCMfIuUVWmkMtWAEWXI7NyvOBPqJab8KZR8qkFnleyzefHfssxPGWV8sW09en1VkjDRPasHRmc~w22lSpF3dWqZAFbocRFZGLS-h5eXj~Qin-kxMo2DgxHE0K-Svg4BPAJ83s408SkruRq3q3B46IBxmR4mDfx4U8T~tN1mvQZGWtXESm~rIY8K40ZSwdTlOE8eMiogFsjH5HzXvc3pBFA__&Key-Pair-Id=APKAJAGZ7VMH2PFPW6UQ