最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue + webpack如何繞過QQ音樂接口對(duì)host的驗(yàn)證詳解

 更新時(shí)間:2018年07月01日 15:29:00   作者:修飾  
這篇文章主要給大家介紹了關(guān)于利用vue + webpack如何繞過QQ音樂接口對(duì)host的驗(yàn)證的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

最近在使用vue2.5+webpack3.6擼一個(gè)移動(dòng)端音樂項(xiàng)目, 獲取全部歌單json數(shù)據(jù)時(shí)遇到了接口對(duì)host和referer的限制 ,故不能直接在前端使用jsonp對(duì)接口數(shù)據(jù)的讀取。 

一、 先實(shí)現(xiàn)使用jsonp讀取的方式安裝jsonp模塊并, 封裝請(qǐng)求方法

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)
 // 結(jié)果返回一個(gè)Promise對(duì)象
 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) ES5
 params += `&${k}=${encodeURIComponent(value)}` // ES6
 }
 // 去掉首個(gè)參數(shù)的&, 因?yàn)閖sonp方法中參數(shù)自帶&
 return params ? params.substring(1) : ''
}

3. 請(qǐng)求數(shù)據(jù)

# 代碼
 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. 組件內(nèi)調(diào)用getRecommend()方法, 獲取數(shù)據(jù)

methods: {
 _getRecommend() {
 getRecommend().then((res) => {
  // ERR_OK = 0是自定義的語義化參數(shù), 對(duì)應(yīng)返回json對(duì)象的code
  if (res.code === ERR_OK) {
  console.log(res.data)
  const data = res.data
  this.slider = data.slider
  }
 })
 }
},
created() {
 this._getRecommend()
}

console.log(res.data)可打印出json數(shù)據(jù)

以上是使用jsonp的方式請(qǐng)求數(shù)據(jù), 但對(duì)于被host和referer限制的json, 需要繞過host驗(yàn)證,先讓服務(wù)端請(qǐng)求接口,前端頁面再通過服務(wù)端請(qǐng)求數(shù)據(jù)。而不能像jsonp那樣直接前端請(qǐng)求json對(duì)象。報(bào)錯(cuò)如下

二、后端axios(ajax)請(qǐng)求接口數(shù)據(jù)

1.  定義后端代理請(qǐng)求 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.  前端請(qǐng)求后端已獲取的遠(yuǎn)程數(shù)據(jù)

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, {
 // 以下參數(shù)自行參考源json文件的Query String Parameters
 platform: '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. 組件內(nèi)調(diào)用getDiscList()方法, 可輸出json數(shù)據(jù)

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

總結(jié), vue+webpack項(xiàng)目中,如需請(qǐng)求獲取遠(yuǎn)程json數(shù)據(jù)時(shí), 一般由兩種情況:

1. 未受host和referer限制的前端組件可以直接使用jsonp插件請(qǐng)求json對(duì)象

2. 受host和referer限制需要驗(yàn)證的, 通過后端代理方式,使用axios請(qǐng)求, 前端再請(qǐng)求后端json對(duì)象

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • 實(shí)現(xiàn)shallowReadonly和isProxy功能示例詳解

    實(shí)現(xiàn)shallowReadonly和isProxy功能示例詳解

    這篇文章主要為大家介紹了實(shí)現(xiàn)shallowReadonly和isProxy功能示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • vue父組件值變化但子組件不刷新的三種解決方案

    vue父組件值變化但子組件不刷新的三種解決方案

    父組件傳遞給子組件的數(shù)據(jù),如果是一個(gè)復(fù)雜對(duì)象(例如一個(gè)數(shù)組或?qū)ο螅?那么子組件只會(huì)監(jiān)聽對(duì)象的引用而不是對(duì)象的內(nèi)容,這意味著當(dāng)對(duì)象的內(nèi)容發(fā)生變化時(shí),子組件不會(huì)更新,本文給大家介紹了vue子組件不刷新的三種解決方案,需要的朋友可以參考下
    2024-03-03
  • vue項(xiàng)目前端加前綴(包括頁面及靜態(tài)資源)的操作方法

    vue項(xiàng)目前端加前綴(包括頁面及靜態(tài)資源)的操作方法

    這篇文章主要介紹了vue項(xiàng)目前端加前綴(包括頁面及靜態(tài)資源)的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-12-12
  • 關(guān)于vue-treeselect綁值、回顯等常見問題的總結(jié)

    關(guān)于vue-treeselect綁值、回顯等常見問題的總結(jié)

    這篇文章主要介紹了關(guān)于vue-treeselect綁值、回顯等常見問題的總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Vue程序調(diào)試和排錯(cuò)技巧分享

    Vue程序調(diào)試和排錯(cuò)技巧分享

    因?yàn)槌绦虻恼{(diào)試非常重要,程序猿可以利用好的調(diào)試方法去查找定位自己的問題所在之處,從而,達(dá)到糾正自己程序錯(cuò)誤的地方,健壯自己的程序,讓問題變得越來越少,程序變得越來越健康,所以本文給大家介紹了Vue程序調(diào)試和排錯(cuò)技巧,需要的朋友可以參考下
    2024-12-12
  • vue el-date-picker動(dòng)態(tài)限制時(shí)間范圍案例詳解

    vue el-date-picker動(dòng)態(tài)限制時(shí)間范圍案例詳解

    這篇文章主要介紹了vue el-date-picker動(dòng)態(tài)限制時(shí)間范圍案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • vue-cli多頁面應(yīng)用實(shí)踐之實(shí)現(xiàn)組件預(yù)覽項(xiàng)目

    vue-cli多頁面應(yīng)用實(shí)踐之實(shí)現(xiàn)組件預(yù)覽項(xiàng)目

    在最近的項(xiàng)目中遇到了一個(gè)需求,找了相關(guān)資料后終于實(shí)現(xiàn),這篇文章主要給大家介紹了關(guān)于vue-cli多頁面應(yīng)用實(shí)踐之實(shí)現(xiàn)組件預(yù)覽項(xiàng)目的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • 淺析為什么Vue使用虛擬DOM

    淺析為什么Vue使用虛擬DOM

    Vue?使用虛擬?DOM?的初衷不僅是為了性能優(yōu)化,更重要的是為了解決開發(fā)效率和靈活性的問題,下面我們就來探討一下虛擬DOM的作用與原理吧
    2024-12-12
  • 對(duì)vue中v-on綁定自定事件的實(shí)例講解

    對(duì)vue中v-on綁定自定事件的實(shí)例講解

    今天小編就為大家分享一篇對(duì)vue中v-on綁定自定事件的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue自定義Hook實(shí)現(xiàn)簡化本地存儲(chǔ)

    Vue自定義Hook實(shí)現(xiàn)簡化本地存儲(chǔ)

    這篇文章主要為大家詳細(xì)介紹了如何通過使用 Vue 3 的 Composition API 創(chuàng)建一個(gè)強(qiáng)大而靈活的自定義 Hook,簡化了在 localStorage 或 sessionStorage 中管理數(shù)據(jù)的流程,需要的可以參考下
    2023-12-12

最新評(píng)論

万州区| 开平市| 沙洋县| 鄯善县| 南昌县| 仙游县| 莱州市| 黄梅县| 株洲市| 江门市| 沂南县| 济源市| 福州市| 新余市| 阿城市| 慈溪市| 公主岭市| 洞头县| 抚顺县| 临城县| 阿瓦提县| 临猗县| 北京市| 板桥市| 白银市| 广安市| 新野县| 原平市| 汉寿县| 桦川县| 玉门市| 深圳市| 土默特右旗| 三穗县| 安仁县| 涿州市| 绥阳县| 满洲里市| 拜城县| 曲阜市| 略阳县|