继续上次的探索,整理了下情况。
需求是我想做一张音乐卡片,除了播放音乐外,还能做音乐可视化。由于音乐可视化的Web audio API,需要音源支持跨域。在尝试网易云音乐的时候,发现其外链不能給Web audio API使用(报跨域错误),需要访问外链,返回一个CDN地址,把这个CDN地址传给Web audio API才能正常播放。
这样一来,就需要有个地方,将网易云音乐外链转成。
首先尝试在前端,但是发现不行。因为访问外链是通过HTTP 302直接换地址的,Axios抓不到接口。改用Fetch,虽然能拿到接口,但是好像也由于跨域问题,不能
既然前端不行,就尝试在后端代理网易云外链的接口。结果分别用nginx和python fastapi尝试,都不行,但是在我本地就可以。排查原因后,发现原来是因为我的服务器不在国内,国外访问网易云外链,报错拿不到CDN地址,所以接口不用。
这样一来,我需要在国内服务器上起这个服务。我这么试了一下后,在开发环境可以用了。但是等我部署到线上了,又不能用了。因为我线上是HTTPS,接口是HTTP写的,被浏览器拦截了。
于是我又想着用线上服务器的nginx代理一下这个国内接口。结果代理完10分钟,端口就被拦截了,提示我的域名没有备案,不让使用这个接口。。。。。真是尴尬。
就没有走Nginx代理,在服务器上起了一个fastapi,通过request再转发。这样才绕开了所有的限制。
但是国内服务器快过期了,我不准备续订。所以想了想,直接在家里电脑上起了查询接口,配置成开机启动的服务。再把服务器上那个fastapi程序改成向家里地址请求,通过这个方式最终实现了需求。
回顾一下,流程之所以搞得如此繁琐,主要还是在于网易云对海外的隔离。导致我不能直接在海外服务器上起服务。
PS : 网易云外链接口:https://music.163.com/song/media/outer/url?id=${id}.mp3
id跟歌曲介绍页是一样的,比如下面这首歌
https://music.163.com/#/song?id=22644323
其外链为https://music.163.com/song/media/outer/url?id=22644323.mp3
Aruarian Dance
Nujabes
发表回复