ajax跨域请求酷狗音乐API被拒,

$.ajax({
                        type:"get",
                        url:"http://www.kugou.com/yy/index.php?r=play/getdata&hash=0B464599DB574F6BD1D9730135970DF8&album_id=516425&_=1500008067482",
                        async:true,
                        success:function (data){
                        console.log(data);
                        }
                         
                    });

clipboard.png

$.ajax({
                        type:"get",
                        url:"http://www.kugou.com/yy/index.php?r=play/getdata&hash=0B464599DB574F6BD1D9730135970DF8&album_id=516425&_=1500008067482",
                        async:true,
                        beforeSend:function (xhr){
                            xhr.setRequestHeader("Access-Control-Allow-Origin","*");
                        xhr.setRequestHeader("Host","songsearch.kugou.com");
                        xhr.setRequestHeader("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0");
                        xhr.setRequestHeader("Accept","*/*");
                        xhr.setRequestHeader("Accept-Language","zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
                        xhr.setRequestHeader("Accept-Encoding","gzip, deflate");
                        xhr.setRequestHeader("Referer","http://www.kugou.com/yy/html/search.html");
                        xhr.setRequestHeader("Cookie","UM_distinctid=15d1131d8985-0e8266a117719a8-12646f4a-1fa400-15d1131d8991cd; kg_mid=fd73d6fda1b05522b9a34754c90a3185; Hm_lvt_aedee6983d4cfc62f509129360d6bb3d=1499959312,1499959321,1500005541,1500005583; Hm_lpvt_aedee6983d4cfc62f509129360d6bb3d=1500005583");
                        xhr.setRequestHeader("Connection","keep-alive");
                        },
                        success:function (data){
                        console.log(data);
                        }
                    });

加上了跟原网站请求一样的响应头

clipboard.png

不知道怎么搞了

我的

clipboard.png

别人的

clipboard.png

一样的url

clipboard.png

结果也是一样的

播放器能用 英文不是一样的url

<audio controls="controls" src="http://fs.web.kugou.com/6c68efc883b5c9f2ac5620df5c3c12d2/5968472c/G010/M00/00/1F/qoYBAFUOaRCACPGtADl0eFwU_IQ755.mp3" id="audio"></audio>
阅读 8.7k
10 个回答

前些日子我也遇到了和楼主一样到问题, 最后得出到结论是必须后端支持否则前端无法做到。

大概的思路有几个:

  1. 酷狗服务器修改为支持跨域,即设置 Access-Control-Allow-Origin:* 。

  2. 酷狗服务支持jsonp类型ajax调用,需要处理callback参数

  3. 在自己的服务器后台请求数据然后用普通的ajax发给前端。

1和2基本不可能,一般人家都不会搭理你的,我是用方法3解决问题的。

参考:链接描述

应该是酷狗做了跨域限制,非它允许的域名不得请求资源

async: false,
url: "http://songsearch.kugou.com/song_search_v2",
data: {
'keyword': $("#music_keyword").val(),
'limit': 20
},

需要后端配合才行,本地你可以使用Nginx设置代理,或自己本地用node自建服务做代理

可以用PHP写一个,curl很简单。纯前端跨域有很多限制。

js跨域解决起来很复杂,还是用PHP等后端语言调用ajax,PHP中不存在跨域的问题,在后端处理,不存在跨域的问题。

你做开发,如果连客户端AJAX跨域都不知道,我就呵呵了.

浏览器限制你不能跨域,因为有安全问题.

你可以自己做一个浏览器!

看后段限制有多强,可能需要phantom.js这种库来请求

我用了它音乐的三个api,这个跨步过去,需要后台走代理才行。用node也是可以的

支持配合后端食用,即使你不是酷狗的域名,你也可以伪装头部完成请求,而只有前端,限制太大

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题