浏览代码

feat: 通用反爬虫验证码适配

cuiyalong 4 年之前
父节点
当前提交
68ccee842f
共有 4 个文件被更改,包括 92 次插入20 次删除
  1. 3 0
      public/index.html
  2. 25 0
      src/api/axios.js
  3. 57 20
      src/api/index.js
  4. 7 0
      vue.config.js

+ 3 - 0
public/index.html

@@ -23,6 +23,9 @@
       <link href='https://web2-jytest.jydev.jianyu360.com/pccss/reset_pc.css' rel="stylesheet" type="text/css"/>
       <link href='https://web2-jytest.jydev.jianyu360.com/css/pc.css?v=6302' rel="stylesheet"/>
       <link href='https://web2-jytest.jydev.jianyu360.com/pccss/public-nav-1200.css?v=6302' rel="stylesheet" type="text/css"/>
+
+      <!-- <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script> -->
+      <script src="https://www.jianyu360.com/antiRes/js/mainHook.js"></script>
     <% } %>
 
     <!-- 使用CDN的CSS文件 -->

+ 25 - 0
src/api/axios.js

@@ -0,0 +1,25 @@
+import axios from 'axios'
+import mock from '@/api/mock'
+
+console.log('[debug]当前环境:', process.env)
+const service = axios.create({
+  baseURL: process.env.VUE_APP_BASE_API
+})
+
+service.interceptors.request.use(config => {
+  // 在请求发送之前做一些事
+  return config
+}, function (error) {
+  // 当出现请求错误是做一些事
+  console.log('--请求超时--', error)
+  return Promise.reject(error)
+})
+
+// 添加一个返回拦截器
+service.interceptors.response.use(response => {
+  return response.data
+})
+
+const useMock = process.env.NODE_ENV === 'development' && process.env.VUE_APP_MOCK === 'true'
+
+export default useMock ? mock : service

+ 57 - 20
src/api/index.js

@@ -1,25 +1,62 @@
-import axios from 'axios'
-import mock from '@/api/mock'
+import axios from './axios'
+import qs from 'qs'
 
-console.log('[debug]当前环境:', process.env)
-const service = axios.create({
-  baseURL: process.env.VUE_APP_BASE_API
-})
+// jquery请求
+const ajax = config => new Promise((resolve, reject) => {
+  // 获取url参数
+  const url = config.baseURL ? config.baseURL + config.url : process.env.VUE_APP_BASE_API + config.url
 
-service.interceptors.request.use(config => {
-  // 在请求发送之前做一些事
-  return config
-}, function (error) {
-  // 当出现请求错误是做一些事
-  console.log('--请求超时--', error)
-  return Promise.reject(error)
-})
+  const ajaxConf = {
+    url: url,
+    method: config.method
+  }
 
-// 添加一个返回拦截器
-service.interceptors.response.use(response => {
-  return response.data
-})
+  // 获取data数据
+  const data = config.data
+  const params = config.params
+  const headers = config.headers
+
+  if (ajaxConf.method.toLowerCase() === 'post') {
+    if (data) {
+      if (typeof data === 'string') {
+        // formData
+        ajaxConf.data = qs.parse(data)
+      } else {
+        // json
+        ajaxConf.contentType = 'application/json;charset=UTF-8'
+        ajaxConf.data = JSON.stringify(data)
+      }
+    }
+  } else if (ajaxConf.method.toLowerCase() === 'get') {
+    if (params) {
+      ajaxConf.data = params
+    }
+  }
+  if (headers) {
+    ajaxConf.headers = headers
+  }
 
-const useMock = process.env.NODE_ENV === 'development' && process.env.VUE_APP_MOCK === 'true'
+  // 此处数据预处理
+
+  // 此处添加请求拦截(请求发送前处理参数)
+  // $.ajaxPrefilter((options, originalOptions, jqXHR) => {
+  //   console.log('options', options)
+  //   console.log('originalOptions', originalOptions)
+  //   console.log('jqXHR', jqXHR)
+  // })
+
+  $.ajax({
+    ...ajaxConf,
+    beforeSend: xhr => {},
+    success: res => {
+      // 此处添加响应拦截
+      resolve(res)
+    },
+    error: err => {
+      reject(err)
+    }
+  })
+})
 
-export default useMock ? mock : service
+const useJQueryAjax = !!window.antiAdd
+export default useJQueryAjax ? ajax : axios

+ 7 - 0
vue.config.js

@@ -32,8 +32,15 @@ module.exports = {
     port: '8080',
     disableHostCheck: true,
     proxy: {
+      // 反爬虫接口代理
+      // '/subVipPortrait/winner': {
+      //   target: 'http://192.168.20.178:8800',
+      //   changeOrigin: true,
+      //   logLevel: 'debug'
+      // },
       '^/bigmember': {
         target: 'https://web2-jytest.jydev.jianyu360.com',
+        // target: 'http://192.168.20.178:8800',
         changeOrigin: true,
         logLevel: 'debug',
         pathRewrite: {