electron拦截请求通过转发修改响应信息

文章介绍了如何在Electron应用中通过监听请求,拦截特定接口并重定向到自定义服务来修改响应信息。同时,文章还提到了使用`electron-pdf-window`库来加载和显示PDF文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

electron拦截请求通过转发修改响应信息,实现自定义返回结果

实现原理:通过监听请求,拦截到我们要修改的请求接口,然后把响应重定向到我们提前准备好的服务就ok了。(至于为什么不能直接把响应信息给修改了,我尝试过。没解决。)

官网API连接:https://www.electronjs.org/docs/api/web-request#webrequestonheadersreceivedfilter-listener

const { session } = require('electron')

// 添加要过滤/拦截的地址
  const filter = {
    urls: ['**://*.biadu.com/*']
  }
// 发送之前进行拦截,(可以修改响应头什么的)
  /* session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
     details.requestHeaders['User-Agent'] = 'MyAgent'
     callback({ requestHeaders: details.requestHeaders })
   });
 */
  // 发送请求之前,我们把结果重定向到我们自己的服务。(然后返回的实际内容就是我们的服务返回的内容啦)
  session.defaultSession.webRequest.onBeforeRequest(filter, (details, callback) => {
  	// 返回内容可以是 base64加密的文本。
    callback({ redirectURL: `http://localhost:9000/` });
  });

//=============================
// nodejs 创建一个服务(用其他服务器都可以的。)
require("http").createServer(function (req, res) {
    const data =  {
        "IDENTITY_NUMBER_LOGIN_ALIAS": "身份证号登录",
        "IS_CUSTOM_MENU_LOGO": "false"
    };//text/plain是普通文本
    res.setHeader('Content-Type', 'text/plain; charset=utf-8');
    res.end(JSON.stringify(data));
}).listen(duankou)

electron 如何加载解析 pdf 文件?三大方案解决问题

引用:https://newsn.net/say/electron-pdf.html

npm install electron-pdf-window --save
const { app } = require('electron')
const PDFWindow = require('electron-pdf-window')

app.on('ready', () => {
  const win = new PDFWindow({
    width: 800,
    height: 600
  })

  win.loadURL('http://mozilla.github.io/pdf.js/web/compressed.tracemonkey-pldi-09.pdf')
})

### 如何在 Electron Vue 项目中使用 Axios 发起 HTTP 请求 #### 创建 Axios 实例并配置默认参数 为了更好地管理和维护 HTTP 请求,建议创建一个独立的文件用于封装 Axios。通常命名为 `http.js` 或者 `api.js`。 ```javascript // src/utils/http.js import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // api base_url timeout: 5000 // request timeout }); // Request interceptors service.interceptors.request.use( config => { // Add common headers or tokens here before sending the request return config; }, error => { // Handle request errors return Promise.reject(error); } ); // Response interceptors service.interceptors.response.use( response => { const res = response.data; // If successful, resolve with data return res; }, error => { // Handle response errors (e.g., network issues) return Promise.reject(error); } ); export default service; ``` 此部分代码定义了一个带有基础 URL 和超时设置的新 Axios 实例,并设置了请求和响应拦截器[^2]。 #### 在 main.js 中引入全局注册 由于 Axios 已经被全局引入到 Vue 应用程序中,在 `main.js` 文件里不需要再次显式导入 Axios,只需确保其他地方可以正常使用即可[^3]。 ```javascript // src/main.js import Vue from 'vue'; import App from './App.vue'; import http from './utils/http'; // Import custom Axios instance Vue.config.productionTip = false; Vue.prototype.$http = http; // Register globally as $http new Vue({ render: h => h(App), }).$mount('#app'); ``` 这样做的好处是在任何组件内部都可以通过 `this.$http()` 来调用之前自定义好的 Axios 方法而无需重复引用[^4]。 #### 组件内发起请求 最后一步就是在实际使用的页面或组件里面编写业务逻辑来触发网络请求操作: ```html <template> <div> <button @click="fetchData">点击发送请求</button> </div> </template> <script> export default { name: "Home", methods: { fetchData() { this.$http.get('/users_find').then(response => { console.log('Response:', response); // Process returned data accordingly }).catch(err => { console.error('Error occurred during fetching data.', err); }); } } }; </script> ``` 上述模板展示了如何在一个按钮点击事件处理器中执行 GET 请求,并处理成功返回数据以及可能发生的错误情况[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TimBL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值