最近在使用vue2.5+webpack3.6撸一个移动端音乐项目, 获取全部歌单json数据时遇到了接口对host和referer的限制 ,故不能直接在前端使用jsonp对接口数据的读取。

一、 先实现使用jsonp读取的方式

安装jsonp模块并, 封装请求方法

1. $ npm install -S jsonp

2. 封装

import originJSONP from 'jsonp'function jsonp(url, data, options) {// 如果存在?则直接加params(data), 否则先加?再加 params(data)url += (url.indexOf('?') < 0 ? '?' : '') + params(data)// 结果返回一个Promise对象return new Promise((resolve, reject) => {originJSONP(url, options, (err, data) => {if (!err) {resolve(data)} else {reject(err)}})})
}function params(data) {let params = ''for (var k in data) {let value = data[k] != undefined ? data[k] : ''// url += '&' + k + '=' + encodeURIComponent(value) ES5params += `&${k}=${encodeURIComponent(value)}`  // ES6}// 去掉首个参数的&, 因为jsonp方法中参数自带&return params ? params.substring(1) : ''
}复制代码

3. 请求数据

# 代码const commonParams = {g_tk: 5381,inCharset: 'utf-8',outCharset: 'utf-8',notice: 0,format: 'jsonp'
}
const options = {param: 'jsonpCallback'
}getRecommend() {const url = 'https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg'const data = Object.assign({}, commonParams, {platform: 'h5',uin: 0,needNewCode: 1})return jsonp(url, data, options)
}复制代码

4. 组件内调用getRecommend()方法, 获取数据

methods: {_getRecommend() {getRecommend().then((res) => {// ERR_OK = 0是自定义的语义化参数, 对应返回json对象的codeif (res.code === ERR_OK) {console.log(res.data)const data = res.datathis.slider = data.slider}})}
},
created() {this._getRecommend()
}复制代码

console.log(res.data)可打印出json数据

以上是使用jsonp的方式请求数据, 但对于被host和referer限制的json, 需要绕过host验证,先让服务端请求接口,前端页面再通过服务端请求数据。而不能像jsonp那样直接前端请求json对象。报错如下

二、后端axios(ajax)请求接口数据

1.  定义后端代理请求 build/webpack.dev.config.js

const axios = require('axios')
devServer: {before(app) {app.get('/api/getDiscList', function (req, res) {var url = 'https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg'axios.get(url, {headers: {referer: 'https://c.y.qq.com/',host: 'c.y.qq.com'},params: req.query}).then((response) => {res.json(response.data)}).catch((e) => {console.log(e)})})},#  ...其他原来的代码
}
复制代码

2.  前端请求后端已获取的远程数据

import axios from 'axios'function getDiscList() {// const url = 'https://c.y.qq.com/splcloud/fcgi-bin/fcg_get_diss_by_tag.fcg'const url = '/api/getDiscList'const data = Object.assign({}, commonParams, {// 以下参数自行参考源json文件的Query String Parametersplatform: 'yqq',uin: 0,needNewCode: 0,hostUin: 0,sin: 0,ein: 29,sortId: 5,rnd: Math.random(),categoryId: 10000000,format: 'json'})return axios.get(url, {params: data}).then((res) => {return Promise.resolve(res.data)})
}复制代码

3. 组件内调用getDiscList()方法, 可输出json数据

methods: {_getRecommend() {getRecommend().then((res) => {if (res.code === ERR_OK) {// console.log(res.data)const data = res.datathis.slider = data.slider}})},_getDiscList() {getDiscList().then((res) => {console.log(res.data)})}
},
created() {this._getRecommend()this._getDiscList()
}复制代码

总结, vue+webpack项目中,如需请求获取远程json数据时, 一般由两种情况:

1. 未受host和referer限制的前端组件可以直接使用jsonp插件请求json对象

2. 受host和referer限制需要验证的, 通过后端代理方式,使用axios请求, 前端再请求后端json对象

vue+webpack绕过QQ音乐接口对host的验证相关推荐

  1. 用Vue高仿qq音乐官网-pc端

    用Vue高仿qq音乐官网-pc端 一直想做一个vue项目 然后呢 我就做了http://www.tuicool.com/articles/eymeiiN 效果预览 部分地方不全部根据原版,也有自由发挥 ...

  2. VUE获取网易云音乐接口,并实现歌词滚动效果

    VUE获取网易云音乐接口,并实现歌词滚动效果 最近在捣腾个人博客,加了个播放音乐的模块,所以在这里记录一下歌曲播放歌词实时滚动效果的实现,顺便总结加深一下对各个知识点的理解. GitHub地址 演示地 ...

  3. 通过QQ音乐接口获取数据+播放源

    最新QQAPI接口[QQ 音乐API koa2全接口实现](https://blog.csdn.net/ZC_XY/article/details/90813351) Github - program ...

  4. Vue.js仿QQ音乐(移动端)

    项目地址 用电脑在线预览记得切换成手机端哟 在线预览( ̄3 ̄) 源码地址 项目描述 主要技术 使用Vue.js实现单页应用 使用Vue Router处理路由请求 使用Vuex实现数据存储,管理组件间的 ...

  5. 调用QQ音乐接口,实现自制MV播放器

    本文给大家讲解如何调用QQ音乐MV接口,实现强大的MV在线播放器功能 第一步:调用MV查询接口,获取json数据,拿到vid 接口地址: https://c.y.qq.com/soso/fcgi-bi ...

  6. 调用qq音乐接口备用...

    刚先看到一个人发调用qq音乐 我在网上找了下 . 网页代码示例:<body οnclick="window.open('tencent://QQMusic/?  version==70 ...

  7. vue 项目获取QQ音乐歌单数据

    1.  前端请求(recommend.js): import axios from 'axios'export function getDiscList() {const url = '/api/ge ...

  8. java qq音乐接口 api,QQ音乐解析API接口更新:支持HQ,ape,flac无损音质,缓存功能

    {"Code":"OK","keyword":"\u6296\u97f3\u70ed\u6b4c","page ...

  9. 前端构造桌面级应用(QQ音乐)

    前端构造桌面级音乐播放器(nw与electron) 服务端地址 majunchang.cn:3000/#/recommend 最近研究前端如何构造桌面级应用,看了一下nw和ecectron.于是自己使 ...

  10. QQ音乐vkey获取,更新播放url

    QQ音乐接口播放经常换, 最开始 url: `http://ws.stream.qqmusic.qq.com/${musicData.songid}.m4a?fromtag=46` 然后 url:`h ...

最新文章

  1. 8.公有继承 保护继承 私有继承
  2. Python Django 参数解包及代码示例
  3. Vue 消除Token过期时刷新页面的重复提示
  4. UML--类之间的五种关系
  5. c语言中的函数可变参数列表相关的三个宏
  6. 关于static继承的问题
  7. ==与===的区别 与类型转换
  8. Django Zip文件下载
  9. 密码学|离散对数问题、计算量较大的二次方程求解(sagemath与python z3库的使用)
  10. wifi 框架流程分析
  11. Centos升级安装Openssh9.0p1
  12. 新大陆物联网Android开发实战(一)通过接入API文档获取新大陆物联网官网Logo-GETPOST多线程实战-网络资源下载
  13. DUL Oracle Data Unloader工具下载
  14. mysql procedure 存储过程
  15. 计算机在铁路中的应用论文800字,交通运输和交通论文,关于计算机信息网络系统在铁路交通运输管理中的应用相关参考文献资料-免费论文范文...
  16. linux下的屏幕录像软件罗列
  17. 11 wifi 驱动 进阶 http://blog.csdn.net/wh_19910525/article/details/7393615
  18. 视频分析算法的原理简介
  19. 古堡探险_判断5个数都不同的简单方式及暴力破解的简单方式
  20. 陈小春版韦小宝七个老婆简介

热门文章

  1. mongodb聚合内存不足解决方案
  2. 我在开发中所遇到的iOS7新特性以及iOS7与iOS6的适配问题总结
  3. The labor day's schedule and the rate of process
  4. 【OpenCV入门指南】第十一篇 鼠标绘图
  5. Magnet for mac(专业窗口辅助工具)支持m1
  6. 如何在Mac OS上从Photoshop作为插件访问Topaz Mask AI
  7. Mac 技巧 | CAD 汉化后无法新建模板怎么办?
  8. Android自定义控件之虚线的用法
  9. (日常搬砖)数据集标注格式转换:txt转xml(VOC格式)
  10. 微任务,宏任务和Event-Loop