欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2018年07月01日 15:29:00   作者:修飾  
這篇文章主要給大家介紹了關(guān)于利用vue + webpack如何繞過(guò)QQ音樂接口對(duì)host的驗(yàn)證的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(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是自定義的語(yǔ)義化參數(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, 需要繞過(guò)host驗(yàn)證,先讓服務(wù)端請(qǐng)求接口,前端頁(yè)面再通過(guò)服務(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)
  })
 })
 },
 # ...其他原來(lái)的代碼
}

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)證的, 通過(guò)后端代理方式,使用axios請(qǐng)求, 前端再請(qǐng)求后端json對(duì)象

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

相關(guān)文章

  • vue3自定義確認(rèn)密碼匹配驗(yàn)證規(guī)則的操作代碼

    vue3自定義確認(rèn)密碼匹配驗(yàn)證規(guī)則的操作代碼

    這篇文章主要介紹了vue3自定義確認(rèn)密碼匹配驗(yàn)證規(guī)則的操作代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • 詳解Vue中AXIOS的封裝

    詳解Vue中AXIOS的封裝

    這篇文章主要為大家介紹了Vue中AXIOS的封裝,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • 詳解基于element的區(qū)間選擇組件校驗(yàn)(交易金額)

    詳解基于element的區(qū)間選擇組件校驗(yàn)(交易金額)

    這篇文章主要介紹了詳解基于element的區(qū)間選擇組件校驗(yàn)(交易金額),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Vue中render方法的使用詳解

    Vue中render方法的使用詳解

    這篇文章主要為大家詳細(xì)介紹了Vue中render方法的使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • vue父子組件通信的高級(jí)用法示例

    vue父子組件通信的高級(jí)用法示例

    這篇文章主要給大家介紹了關(guān)于vue父子組件通信的高級(jí)用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue腳手架vue-cli的學(xué)習(xí)使用教程

    vue腳手架vue-cli的學(xué)習(xí)使用教程

    本篇文章主要介紹了vue腳手架vue-cli的學(xué)習(xí)使用教程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • vue實(shí)現(xiàn)圖片上傳到后臺(tái)

    vue實(shí)現(xiàn)圖片上傳到后臺(tái)

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)圖片上傳到后臺(tái),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • Vue使用openlayers實(shí)現(xiàn)繪制圓形和多邊形

    Vue使用openlayers實(shí)現(xiàn)繪制圓形和多邊形

    這篇文章主要為大家詳細(xì)介紹了Vue如何使用openlayers實(shí)現(xiàn)繪制圓形和多邊形,文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起動(dòng)手嘗試一下
    2022-06-06
  • vue.js+ElementUI實(shí)現(xiàn)進(jìn)度條提示密碼強(qiáng)度效果

    vue.js+ElementUI實(shí)現(xiàn)進(jìn)度條提示密碼強(qiáng)度效果

    這篇文章主要介紹了vue.js+ElementUI實(shí)現(xiàn)進(jìn)度條提示密碼強(qiáng)度效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • vue3.0如何在全局掛載對(duì)象和方法

    vue3.0如何在全局掛載對(duì)象和方法

    這篇文章主要介紹了vue3.0如何在全局掛載對(duì)象和方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04

最新評(píng)論