Electron:如何捕获主进程的所有请求响应?

2024-01-04

我想从主进程中获取电子应用程序中发生的所有请求的响应。

此图显示我想要获得的响应位于“响应”选项卡,而不是 Chrome 开发工具上的“标头”选项卡 https://i.stack.imgur.com/AYA1G.png.

我没有使用<webview>标签,我正在使用mainWindow.loadURL().


This only returns the headers and some other stuff, but not the response
session.defaultSession.webRequest.onCompleted({ urls: ['*://*/*'] }, function (details, callback) {
     console.log(details);
});

因此,为了检索我尝试过的响应:

try {
     mainWindow.webContents.debugger.attach('1.3')
} catch (err) {
     console.log('Debugger attach failed: ', err)
}

mainWindow.webContents.debugger.on('detach', (event, reason) => {
     console.log('Debugger detached due to: ', reason)
});

mainWindow.webContents.debugger.sendCommand('Network.enable');

session.defaultSession.webRequest.onCompleted({ urls: ['*://*/*'] }, function (details, callback) {
     mainWindow.webContents.debugger.sendCommand('Network.getResponseBody', { requestId: details.id.toString() }, function (body, body64) {
          console.log(body);
     });
});

但它输出

UnhandledPromiseRejectionWarning: Error: No resource with given identifier found
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either
                                  by throwing inside of an async function without a catch block,
                                  or by rejecting a promise which was not handled with .catch(). 
                                  (rejection id: 1)

所以我尝试了

try {
     mainWindow.webContents.debugger.attach('1.3')
} catch (err) {
     console.log('Debugger attach failed: ', err)
}

mainWindow.webContents.debugger.on('detach', (event, reason) => {
     console.log('Debugger detached due to: ', reason)
});

mainWindow.webContents.debugger.sendCommand('Network.enable');

mainWindow.webContents.debugger.on('message', function(event, method, params, resourceType){
     if (method === 'Network.responseReceived') {
          if (params.type === 'XHR') {
               mainWindow.webContents.debugger.sendCommand('Network.getResponseBody', { requestId: params.requestId }, function (body, body64) {
                    console.log(body);
               });
          }
     }
});

但它输出相同:

UnhandledPromiseRejectionWarning: Error: No resource with given identifier found
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either
                                  by throwing inside of an async function without a catch block,
                                  or by rejecting a promise which was not handled with .catch(). 
                                  (rejection id: 1)

有任何想法吗?


自从我写这个问题以来已经有一段时间了,我刚刚找到了解决方案。 我混合了 WebRequest API 和调试器 API,它们不共享相同的请求 ID。我还放置了一个函数作为参数,但是 sendMessage 方法返回一个承诺并且没有回调函数。

这是一种仅使用 Debugger API 的方法,效果很好:

try {
  mainWindow.webContents.debugger.attach('1.3');
} catch (err) {
  console.log('Debugger attach failed: ', err);
}

mainWindow.webContents.debugger.on('detach', (event, reason) => {
  console.log('Debugger detached due to: ', reason);
});

mainWindow.webContents.debugger.on('message', (event, method, params) => {
  if (method === 'Network.responseReceived') {
    console.log(params.response.url);
    mainWindow.webContents.debugger.sendCommand('Network.getResponseBody', { requestId: params.requestId }).then(function(response) {
      console.log(response);
    });
  }
})
  
mainWindow.webContents.debugger.sendCommand('Network.enable');

使用以下示例进行制作:

  • https://www.electronjs.org/docs/api/debugger https://www.electronjs.org/docs/api/debugger
  • Chrome 扩展 - 如何获取 HTTP 响应正文? https://stackoverflow.com/questions/18534771/chrome-extension-how-to-get-http-response-body
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Electron:如何捕获主进程的所有请求响应? 的相关文章

  • 使用javascript滚动滚动条或鼠标滚轮后触发事件

    我想知道是否可以触发事件after使用滚动条或鼠标滚轮 或在触摸设备上滑动 时滚动页面 基本上 我想检测用户何时停止滚动 以便我可以进行 AJAX 加载 而不是在滚动时加载 看起来jQuery s scroll 每次用户滚动时都会触发 并且
  • 网络上的等角柱状图

    我计划为游戏的标记 图钉 构建在线地图 但我无法设置标记的正确纬度 原始地图是一个2048 2048px 的正方形 然后我得到了标记 数千个 地图坐标使用 0 到 100 之间的 x y 表示法设置 0 0 是top left角和100 1
  • 鼠标移动时画布拖动

    我正在尝试构建一个可以使用鼠标移动拖动的画布 我做了一些我无法理解的错误 因为一开始似乎有效 然后出现了一个增量错误 使画布移动得太快 考虑以下代码 window onload function var canvas document ge
  • 从 puppeteer PDF 中删除分页符?

    我目前正在尝试查看是否有一种方法可以删除我的 puppeteer PDF 中的分页符 因为我当前的 PDF 设置中的一些分页符正在以一种奇怪的方式切断文本 我正在谈论的内容的屏幕截图 我的傀儡代码 app get companyId pdf
  • 如何在 Windows 网络中的 Intranet Web 应用程序中获取用户的用户名

    我内部有一个简单的 HTML 页面 它只显示一个表单并要求用户填写 我想自动捕获Windows域用户名和机器名 并将其与表单中收集的数据一起提交 我可以在客户端这样做吗 HTML JavaScript 或者我被迫在服务器端执行此操作 我还不
  • 是否有任何理由使用 axios 而不是 ES6 fetch [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 研究了 axios 和 ES6 fetch 的文档 我发现两者非常相似 并且都受到 ajax 及其简写的强烈影响 axios 的主要优点是浏览器
  • 为某个时刻添加持续时间 (moment.js)

    时刻版本 2 0 0 阅读文档后 http momentjs com docs manipulating add 我认为这很简单 Chrome 控制台 var timestring1 2013 05 09T00 00 00Z var tim
  • 如何使用 github 托管外部 CSS 文件?

    我将 css 上传到 github 然后转到网站上的文件并单击 raw 选项 我尝试将其添加到网页中 但 chrome 给出以下错误 资源解释为样式表 但使用 MIME 类型 text plain 进行传输 https raw github
  • 使用nodejs的sequelize更新多对多连接表

    我有一个产品表和一个类别表 一个产品可以有多个类别 一个类别可以有多个产品 因此我有一个 ProductsCategories 表来处理多对多连接 在下面的示例中 我尝试将我的一款产品 ID 为 1 与 3 个不同的类别 ID 为 1 2
  • 如何将焦点设置在 BootStrap 中的第一个输入字段上? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将焦点设置到独立于 id 的 HTML 表单中的第一个输入元素 https stackoverflow com questions 277544 how to set the focus to t
  • 是否有跨浏览器的方式在Javascript中设置style.float?

    通常 如果您需要在 JavaScript 中设置样式属性 您可以这样说 element style attribute value 虽然略有不同 但属性名称通常与 HTML 属性名称类似 尽管是驼峰式 对我来说问题是 float 属性不起作
  • iPhone 上的锁定方向 UIWebView

    有没有办法锁定 UIWebView 的方向 使用 Obj C JS 还是 Html 我不想有按钮或任何东西 我只想在应用程序打开时将其锁定为纵向 好像这个堆栈溢出帖子 https stackoverflow com questions 43
  • 如何在数据表角度中基于 JSON 动态填充表值?

    我在用着Angular 数据表 https l lin github io angular datatables 我需要能够根据返回的数据动态创建表 换句话说 我不想指定列标题 Example json数据 id 2 city Baltim
  • JS:修改 JS 对象中的值/对

    我正在尝试找出修改对象的最佳方法 而无需三次写出类似的对象 所以我有这三个对象 var object1 start start end end type 1 var object2 start start end end type 2 va
  • 将默认搜索文本添加到搜索框 html

    我正在努力将 搜索 文本添加到搜索框 我正在努力实现 onfocus 消失文本 And onblur 重新出现文本 到目前为止 我已经实现了这一点 但我必须将其硬编码为 html eg
  • 当rest api应用程序服务器(express)和Angulars js应用程序在不同端口上运行时出现Cors问题

    我有用node js编写的rest api应用程序 express在端口3000上运行 而angularjs应用程序在同一服务器上的端口9001上运行 从 angularjs 应用程序调用 rst api 时 出现了 cors 问题 在re
  • 如何禁用网页中的萤火虫?

    如何使用 Javascript 禁用 firebug 我想这样做是为了向访问者隐藏我的网页的运作方式 有什么选择可以做到这一点吗 你不能 你能做的最好的事情就是混淆你的 JavaScript 实际上刮掉了 您能做的最好的事情就是将所有安全关
  • D3 强制布局,较大的节点聚集在中心

    我一直在修改将用于标签云的强制布局 每个标签都由一个
  • 如何告诉node.js mysql没有在默认端口上运行?

    我遇到了与此人类似的问题 连接 ECONNREFUSED 节点 js sql https stackoverflow com questions 8825342 connect econnrefused node js sql 我正在尝试将
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已

随机推荐

  • 如何获取该月的第几天?

    我正在尝试检索现在是该月的哪一天 比如今天是2011年8月29日 我想做的只是获取天数 例如 29 或 30 这是该月的哪一天 我该怎么做呢 您需要获取一个 Calendar 实例并获取它是一个月中的哪一天 Calendar cal Cal
  • 从 ui 中删除 QComboBox 中的项目

    我正在尝试调整 QComboBox 的 ui 以便用户可以从下拉列表中删除项目 无需先选择它们 背景是我正在使用 QComboBox 来指示当前打开的是哪个数据文件 我还使用它作为最近打开的文件的缓存 我希望用户能够删除他不想再列出的条目
  • Backbone.js 中的 PATCH 请求方法

    正确的执行方式是什么PATCH在 Backbone js 中保存模型属性时请求 从 Backbone js v0 9 9 开始 您可以简单地通过 patch true to save 阅读更多 http backbonejs org cha
  • C++ 函数成员指针

    我已经阅读了几篇关于此的文章 但似乎无法通过示例代码准确找到我正在寻找的内容 如果有人能给我一些帮助 我将非常感激 在我的标题中我有 void addEvent void func Pack void triggerEvents Pack
  • 将小数格式化为正确的区域性信息中的字符串

    将小数金额格式化为字符串以便 UI 以正确的区域性信息显示的最佳方法是什么 向 ToString 添加格式 myDecimal ToString 00 or myDecimal ToString C 对于可为空的小数 decimal 您将需
  • 为什么 CMake 找不到 GTest(Google 测试)?

    有一个现成的项目 在其中一个 cmake 文件中有一个源代码 find package GTest REQUIRED if NOT GTest FOUND message FATAL ERROR Cannot find Google Tes
  • CKAN可以支持Solr 7.0吗?

    我正在尝试在 Ubuntu 16 04 中安装 Solr 7 0 和 CKAN 2 7 2 但是 我得到了以下内容errors 来自 Solr 管理网站 ckan org apache solr common SolrException o
  • 查找图中的最长路径

    我一直在努力找出复杂网络中最长的路径 我在 StackOverflow 和 Internet 上遇到了很多问题 但没有一个可以帮助我 我写了一个 CQL 作为 start n node match p n LinkTo 1 gt m wit
  • Lucene SpanNearQuery 中“Slop”的确切含义(或 ElasticSearch span_near 中的 slop)

    问题一 问题一
  • 如何判断 CSS 背景图像何时加载?事件被触发了吗? [复制]

    这个问题在这里已经有答案了 我有一个带有图像背景的侧边栏小部件 上面是一个搜索输入表单 我不希望在图像加载之前显示输入 有没有办法附加一个load像普通 img 元素 对象一样 CSS 背景图像的事件处理程序 我知道这可以在普通图像上完成
  • 嵌套循环和字符串连接的性能问题

    有人可以解释一下为什么这段代码需要这么长时间才能运行 即 gt 24 小时 行数为 5000 列数为 2000 即大约 10m 循环 有一个更好的方法吗 for int i 0 i lt m rows i for int j 0 j lt
  • 使用 Akka Stream 传输巨大的 json

    我有一个 json 板的巨大 http 响应问题 其中只有部分是感兴趣的 我无法更改响应结构 这是一个例子 searchString search redirectUrl 0 numRecords 123 refinementViewMod
  • 由多个用户编辑数据库记录

    我设计了数据库表 标准化 在 MS SQL 服务器上 并为应用程序创建了一个独立的 Windows 前端 少数用户将使用该前端来添加和编辑信息 我们将添加一个网络界面 以便稍后在我们的生产区域进行搜索 我担心如果两个用户开始编辑同一条记录
  • 速度模板 - 新线

    我一直在使用 Apache 的 Velocity 引擎和自定义模板 问题是 我无法生成具有相应换行符的字符串 我几乎尝试了我发现的所有内容 例如使用 esc n 和 esc newline 我已经在我的项目中使用转义工具 但似乎我当前使用的
  • 如何在 C++ 中实现对私有基类的强制转换

    如何在 C 中实现对私有基类的强制转换 我不想使用黑客 例如添加朋友等 定义公共转换运算符不起作用 EDIT 例如我有 class A base class class AX private A a child class AY priva
  • PHP变量插值与串联[重复]

    这个问题在这里已经有答案了 以下两种方法 性能 可读性等 有什么区别 您更喜欢哪一种 echo Welcome name s vs echo Welcome name 无论什么对你最有效 都有效 但如果你想追求速度 请使用以下命令 echo
  • 魔术方法(__get,__set)在扩展类中不起作用? [复制]

    这个问题在这里已经有答案了
  • chrome.downloads.download 无法从后台服务人员工作

    我正在尝试创建一个 Chrome 扩展 当单击工具栏按钮时 它将对页面内容进行一些分析 然后将结果保存 即下载 到用户的计算机上 单击按钮时我可以进行分析 但无法触发下载 这是我第一次编写 Chrome 扩展程序 因此任何帮助解决它不起作用
  • Xcode 7:断点停止时崩溃

    我有一个非常烦人的问题 当 Xcode 7 尝试进行符号化时 几乎在每个断点处都会崩溃 我已经做了几件事 包括删除 Xcode 并重新安装它 我在以前的 Xcode 6 X 上也遇到了同样的问题 有什么线索吗 我想知道我是否应该从头开始重新
  • Electron:如何捕获主进程的所有请求响应?

    我想从主进程中获取电子应用程序中发生的所有请求的响应 此图显示我想要获得的响应位于 响应 选项卡 而不是 Chrome 开发工具上的 标头 选项卡 https i stack imgur com AYA1G png 我没有使用