vue-cli axios跨域 + 反向代理模擬http請求host+referer

axios跨域

配置config->index.js中的proxyTable,內容以下:

proxyTable: { // 跨域請求
      '/api': { // 注意此處可設置爲 '*' 表明不限制於某個接口,target下的全部接口均可以訪問
        target:'http://www.webdomain.com', // 你請求的第三方接口
        changeOrigin:true, // 在本地會建立一個虛擬服務端,而後發送請求的數據,並同時接收請求的數據,這樣服務端和服務端進行數據的交互就不會有跨域問題
        pathRewrite:{  // 路徑重寫, '/api' 改成 '*'後此處要刪除
          '^/api': '/api'  // 替換target中的請求地址,也就是說之後你在請求 http://www.webdomain.com/dataxxx 這個地址的時候直接寫成/api便可。
        }
      }
},

單個數據請求 - 反向代理模擬HTTP請求 host + referer

1、webpack v3.6.0以前

故若是想拿到該接口數據能夠進行僞造訪問來路,不過這是一種欺騙服務器的手段,筆者並不提倡,僅供學習參考! 
在老一點版本的vue2.0 配置下,build目錄下有提供了dev-server 和 dev-client的配置,仿造refer配置以下:

build -> dev-server.js 引入相關依賴vue

var app = express()
var apiRoutes = express.Router()

在指定位置配置代理接口webpack

var apiRoutes = express.Router()

/**
 *  @parameter '/getDataList' 本地代理接口,也就是說之後你在請求
 *   http://www.webdomain.com/dataxxx 這個地址的時候直接寫成/getDataList便可
 *
 * */
apiRoutes.get('/getDataList', function (req, res) {
  var url = 'http://www.webdomain.cn/apidata' // 請求的數據接口
  axios.get(url, {
    headers: {
      referer: 'http://www.webdomain.cn',
      host: 'www.webdomain.cn'
    },
    params: req.query
  }).then((response) => {
    res.json(response.data)
  }).catch((e) => {
    console.log(e)
  })
})

2、webpack v3.6.0以後

webpack升級到了v3.6.0,裏邊去掉了dev-server和dev-client兩個文件。 如今再對接口的設置不能再在dev-server配置了,而改在webpack.dev.conf.js裏進行配置。該接口配置以下:

build > webpack.dev.conf.js 引入相關依賴ios

var express = require('express')
var axios = require('axios')
var app = express()
var apiRoutes = express.Router()
app.use('/api', apiRoutes);

在指定位置配置代理接口web

devServer: {
    before(apiRoutes){ // 添加before
      apiRoutes.get('/getDataList',(req,res)=>{
        let url = 'http://www.webdomain.cn/apidata'
        axios.get(url, {
          headers: {
            referer: 'http://www.webdomain.cn/',
            host: 'www.webdomain'
          },
          params: req.query  //這是請求的query
        }).then((response) => {
          //response是api地址返回的,數據在data裏。
          res.json(response.data)
        }).catch((e) => {
          console.log(e);
        })
      });
    },  
  },

 調用代理接口express

/* 獲取用戶session數據 */
export function getUserSession () {
  const url = `${WEB_DOMAIN}/users/info`
  const datas = Object.assign({}, {})

  return axios.get(url, {
params: datas
}).then(res => {
return Promise.resolve(res, datas)
})
}

 注意:第二種方法想實現多個接口跨域訪問就要配置多個 apiRouters.get() 方法,第一種能夠把 '/api' 改成 '*' 表明能夠訪問 target域名下的全部Api

相關文章
相關標籤/搜索