如何修改 Electron 中的响应

问题描述 投票:0回答:1

假设我在

GET
上使用
https://example.com
请求,响应如下:

This is a response message.

我将如何在我的代码中修改它,以便它可以更改响应以说出这样的内容:

This is a MODIFIED response message.

例如,如果我的 Electron 应用程序要导航到

https://example.com
,屏幕会显示修改后的内容而不是原始内容。

本质上,我正在尝试从字面上修改请求。

我的代码基于这个问题,但它只显示了带有预先输入的

Buffer
的概念证明,因为在我的情况下,我想修改响应而不是直接替换它。所以,我的代码如下所示:

protocol.interceptBufferProtocol("http", (req, CALLBACK) => {
  if(req.url.includes("special url here")) {
  var request = net.request({
    method: req.method,
    headers: req.headers,
    url: req.url
  });
  request.on("response", (rp) => {
    var d = [];
    rp.on("data", c => d.push(c));
    rp.on("end", () => {
      var e = Buffer.concat(d);
      console.log(e.toString());
      // do SOMETHING with 'e', the response, then callback it.
      CALLBACK(e);
    });
  });
  request.end();
  } else {
    // Is supposedly going to carry out the request without interception
    protocol.uninterceptProtocol("http");
  }
}

这应该手动请求 URL、获取响应并返回它。如果没有协议事件,它可以工作并给我一个响应,但经过一些调试后,这段代码始终一遍又一遍地调用相同的 URL,但没有响应。

还有WebRequest API,但是没有办法修改响应体,只能修改请求头&相关内容。

我还没有完全研究基于 Chromium 的解决方案,但在查看 this 之后,我不确定是否可以修改响应,以便它首先出现在我的应用程序端。此外,我不熟悉到处发送的 Chromium/Puppeteer 消息。

有没有一种优雅的方式让 Electron 获取 URL 响应/请求,使用 headers/body/等调用 URL,然后保存并修改响应以在 Electron 中显示不同?

node.js electron
1个回答
0
投票

我知道您的协议拦截处理程序会递归调用自身,因为

net.request
会导致同一协议的另一次调用。您可以通过插入结束递归的特殊标头来避免这种情况:

if (req.url.includes("special url here") &&
    !req.headers["x-request-interception"]) {
  var request = net.request({
    method: req.method,
    headers: {...req.headers, "x-request-interception": "true"},
    url: req.url
  });
  ...
} else {
    // Is supposedly going to carry out the request without interception
    protocol.uninterceptProtocol("http");
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.