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

vue + webpack如何繞過QQ音樂接口對host的驗證詳解

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

前言

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

一、 先實現(xiàn)使用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)
 // 結(jié)果返回一個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) ES5
 params += `&${k}=${encodeURIComponent(value)}` // ES6
 }
 // 去掉首個參數(shù)的&, 因為jsonp方法中參數(shù)自帶&
 return params ? params.substring(1) : ''
}

3. 請求數(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ù), 對應(yīng)返回json對象的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的方式請求數(shù)據(jù), 但對于被host和referer限制的json, 需要繞過host驗證,先讓服務(wù)端請求接口,前端頁面再通過服務(wù)端請求數(shù)據(jù)。而不能像jsonp那樣直接前端請求json對象。報錯如下

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

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.  前端請求后端已獲取的遠程數(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項目中,如需請求獲取遠程json數(shù)據(jù)時, 一般由兩種情況:

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

2. 受host和referer限制需要驗證的, 通過后端代理方式,使用axios請求, 前端再請求后端json對象

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    淺析為什么Vue使用虛擬DOM

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

    對vue中v-on綁定自定事件的實例講解

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

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

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

最新評論

邮箱| 仁布县| 综艺| 乌兰察布市| 永和县| 砀山县| 大英县| 独山县| 呈贡县| 富民县| 女性| 南江县| 普宁市| 神木县| 郁南县| 长葛市| 吴川市| 岳普湖县| 忻城县| 兴业县| 辉县市| 青神县| 施秉县| 阳谷县| 桓台县| 怀宁县| 九台市| 六枝特区| 靖西县| 颍上县| 工布江达县| 瑞昌市| 治多县| 东城区| 清远市| 沅陵县| 峡江县| 宝鸡市| 孝昌县| 墨江| 福贡县|