• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

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

    來源:懂視網 責編:小采 時間:2020-11-27 22:12:11
    文檔

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

    vue + webpack如何繞過QQ音樂接口對host的驗證詳解:前言 最近在使用vue2.5+webpack3.6擼一個移動端音樂項目, 獲取全部歌單json數據時遇到了接口對host和referer的限制 ,故不能直接在前端使用jsonp對接口數據的讀取。 一、 先實現使用jsonp讀取的方式安裝jsonp模塊并, 封裝請求方法 1. $ npm
    推薦度:
    導讀vue + webpack如何繞過QQ音樂接口對host的驗證詳解:前言 最近在使用vue2.5+webpack3.6擼一個移動端音樂項目, 獲取全部歌單json數據時遇到了接口對host和referer的限制 ,故不能直接在前端使用jsonp對接口數據的讀取。 一、 先實現使用jsonp讀取的方式安裝jsonp模塊并, 封裝請求方法 1. $ npm

    前言

    最近在使用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) ES5
     params += `&${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對象的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數據

    以上是使用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 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. 組件內調用getDiscList()方法, 可輸出json數據

    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()
    }

    總結, vue+webpack項目中,如需請求獲取遠程json數據時, 一般由兩種情況:

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

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

    好了,

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    vue + webpack如何繞過QQ音樂接口對host的驗證詳解:前言 最近在使用vue2.5+webpack3.6擼一個移動端音樂項目, 獲取全部歌單json數據時遇到了接口對host和referer的限制 ,故不能直接在前端使用jsonp對接口數據的讀取。 一、 先實現使用jsonp讀取的方式安裝jsonp模塊并, 封裝請求方法 1. $ npm
    推薦度:
    標簽: VUE QQ音樂的 webpack
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 99久久精品免费国产大片| 99久久精品久久久久久清纯| 99久久99久久精品免费看蜜桃| 9久热这里只有精品| 人妻少妇精品视频二区 | 亚洲精品无码久久久久AV麻豆| 四虎国产精品免费久久5151| 精品欧洲AV无码一区二区男男 | 久久精品国产精品国产精品污| 亚洲精品无码久久久久久| 精品无码三级在线观看视频| wwwvr高清亚洲精品二区| 国产一区二区精品| 国产亚洲欧美精品久久久| 亚洲精品无码永久在线观看你懂的 | 99视频精品全部在线观看| 亚洲国产精品一区二区久久hs| 天天爽夜夜爽夜夜爽精品视频 | 久久99精品国产麻豆| 亚洲欧美日韩国产精品影院 | 人妻少妇看A偷人无码精品视频| 国产亚洲精品a在线观看 | 久久99久久99精品免视看动漫| 亚洲精品无码久久久久去q | 久久国产精品久久国产精品| 97久久综合精品久久久综合| 国产国产精品人在线视| 国产精品天天看天天狠| 国产欧美精品一区二区三区| 精品爆乳一区二区三区无码av| 久久精品国产精品亚洲毛片| 人人妻人人澡人人爽精品日本| 亚洲精品无码成人片久久| 亚洲精品无码高潮喷水在线| 日产精品久久久久久久| 人人妻人人澡人人爽人人精品97| 亚洲AV永久青草无码精品| 无码人妻精品中文字幕免费| 小辣椒福利视频精品导航| 国产成人99久久亚洲综合精品| 国产精品国色综合久久|