开发一个chrome插件修改响应数据,同步修改network面板的响应值

我们接口的响应数据是加密的,每次查看很不方便,想开发一个插件。

1,在请求接口数据返回后,进行解密,并且覆盖network(网络面板的加密数据)

好的,这是一个比较实用且高效的插件功能。我可以为您提供以下步骤:

  1. 首先,您需要编写一个chrome插件的框架,并且注册一个chrome.webRequest.onCompleted事件监听器。

  2. 在事件监听器中,您需要获取到这次请求的响应数据,进行解密处理,并覆盖network面板的响应值。

下面是实现的代码:

manifest.json文件

{
    "name": "响应数据解密插件",
    "version": "1.0",
    "manifest_version": 2,
    "description": "解密加密的响应数据,同步修改network面板的响应值",
    "permissions": [
        "webRequest",
        "webRequestBlocking",
        "<all_urls>",
        "tabs"
    ],
    "background": {
        "scripts": ["background.js"]
    }
}

background.js文件

chrome.webRequest.onCompleted.addListener(
    function(details) {
        // 判断是否为Ajax请求
        if(details.tabId == -1){ 
            // 解密接口响应数据
            var responseData = decryptResponse(details.responseBody);
            // 将解密后的数据覆盖network面板的响应值
            chrome.devtools.network.getHAR(function(harLog){
                harLog.entries.forEach(function(entry) {
                    if (entry.request.url == details.url) {
                        entry.response.content.text = responseData;
                    }
                });
                chrome.devtools.network.show(harLog);
            });
            // 将解密后的数据返回给接口
            return {responseBody: responseData};
        }
    },
    {urls: ["<all_urls>"]},
    ["responseHeaders", "extraHeaders"]
);

function decryptResponse(responseBody) {
    return responseBody; // 在这里编写解密接口响应数据的代码
}

这样,当您使用chrome浏览器打开一个网页并发起Ajax请求时,插件便会自动解密响应数据,同步修改network面板的响应值。

以下内容部分参考ChatGPT模型:


可以使用chrome.webRequest API来监听网络请求,当请求完成后,通过chrome.devtools.network API来获取network面板的数据,然后进行解密并覆盖原有的数据。

具体实现步骤如下:

  1. 在manifest.json中声明webRequest和devtools权限。
{
  "name": "My Extension",
  "version": "1.0",
  "manifest_version": 2,
  "permissions": [
    "webRequest",
    "webRequestBlocking",
    "devtools",
    "tabs"
  ],
  "background": {
    "scripts": ["background.js"],
    "persistent": false
  },
  "devtools_page": "devtools.html"
}
  1. 在background.js中监听网络请求,当请求完成后,向devtools页面发送消息。
chrome.webRequest.onCompleted.addListener(function(details) {
  chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
    chrome.tabs.sendMessage(tabs[0].id, {action: "onCompleted", details: details});
  });
}, {urls: ["<all_urls>"]});
  1. 在devtools页面中监听background.js发送的消息,并获取network面板的数据。
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.action == "onCompleted") {
    chrome.devtools.network.getHAR(function(har) {
      var entries = har.entries;
      for (var i = 0; i < entries.length; i++) {
        var entry = entries[i];
        if (entry.request.url == request.details.url) {
          var response = entry.response;
          // 解密response数据
          response.content.text = decrypt(response.content.text);
          // 更新network面板的数据
          chrome.devtools.network.updateHAR({entries: entries}, function() {});
          break;
        }
      }
    });
  }
});

function decrypt(data) {
  // 解密代码
  return decryptedData;
}

这样就可以实现在chrome插件中对网络请求的响应数据进行解密并同步更新network面板的数据了。


如果我的建议对您有帮助、请点击采纳、祝您生活愉快

针对你的问题,我给你一个思路,而不是去做一整套浏览器扩展。
你可以在pt环境或者其他环境,不加密,而只有生产环境才加密,从而排查问题的时候去其他环境排查即可。

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
可以通过编写Chrome插件来对接口的响应数据进行解密和覆盖,在Network面板中显示解密后的数据。具体实现步骤如下:

  1. 创建一个Chrome插件

在Chrome浏览器地址栏输入chrome://extensions/,打开扩展程序界面,点击“开发者模式”,然后点击“加载已解压的扩展程序”,选择一个文件夹,创建一个Chrome插件。

  1. 编写插件代码

在插件文件夹中创建一个popup.html文件和一个popup.js文件,分别用于插件弹窗显示和插件的逻辑实现。在popup.js文件中实现解密和覆盖网络面板加密数据的代码。

// 解密函数
function decryptResponseData(data) {
  // TODO: 解密逻辑
  return decryptedData;
}

// 覆盖Network面板响应数据
chrome.devtools.network.onRequestFinished.addListener(function(request) {
    if (request.response.bodySize > 0 && request.response.content.mimeType === 'application/json') {
        request.getContent(function(content, encoding) {
            try {
                var data = JSON.parse(content);
                var decryptedData = decryptResponseData(data); // 解密数据
                request.response.content.text = JSON.stringify(decryptedData);
            } catch (e) {
                console.error('Error: ' + e.message);
            }
        });
    }
});
  1. 在popup.html文件中添加一个按钮,点击按钮通过chrome.devtools.inspectedWindow.eval()方法将解密函数注入到当前页面中执行。
<!DOCTYPE html>
<html>
  <head>
    <title>Decrypt Response Data</title>
  </head>
  <body>
    <button id="decryptBtn">Decrypt Response Data</button>
    <script src="popup.js"></script>
    <script>
      document.getElementById('decryptBtn').addEventListener('click', function() {
        chrome.devtools.inspectedWindow.eval('('+decryptResponseData+')()', function(result, isException) {
          if(isException) {
            console.error('Error: ' + isException.value);
          }
        });
      });
    </script>
  </body>
</html>
  1. 在插件的manifest.json文件中添加必要的配置信息和权限,如下所示:
{
  "manifest_version": 2,
  "name": "Decrypt Response Data",
  "version": "1.0",
  "description": "Decrypt response data and override network panel",
  "background": {
    "scripts": ["popup.js"]
  },
  "browser_action": {
    "default_popup": "popup.html"已黑化的小白   },
  "permissions": [
    "devtools",
    "tabs"已黑化的小白   ]
}
  1. 在Chrome浏览器中开启插件

打开插件管理界面chrome://extensions/,将开发者模式勾选上,点击“加载已解压的扩展程序”选择插件文件夹,插件图标就会出现在Chrome浏览器的工具栏上。

  1. 使用插件功能

打开Chrome浏览器开发者工具,切换到Network面板,选择要查看响应数据的接口,点击查看响应数据的按钮,插件会弹出一个窗口,点击“Decrypt Response Data”按钮,接口的加密数据会被解密并显示在Network面板中。

以上是基本的开发流程和代码实现,具体实现细节依据实际需求进行调整。
如果我的回答解决了您的问题,请采纳!

该回答参考ChatGPT:
实现该功能可以使用浏览器的 devtools 模块来实现,具体步骤如下:

  1. 打开 Chrome 浏览器,并打开开发者工具(F12)。
  2. 切换至 Network 面板,选择需要解密的请求,右键点击并选择 Copy -> Copy as cURL。
  3. 在控制台中输入以下命令:
copy(await (async () => {
  const response = await fetch('PASTE_HERE_THE_COPIED_CURL_COMMAND');
  const text = await response.text();
  const decryptedText = YOUR_DECRYPTION_FUNCTION(text); // 使用自定义的解密函数进行解密操作
  return decryptedText;
})())

其中,将第二步中复制得到的 cURL 命令粘贴到 'PASTE_HERE_THE_COPIED_CURL_COMMAND' 中;将 YOUR_DECRYPTION_FUNCTION 替换为你自己编写的解密函数名称。

  1. 点击回车执行命令,此时解密后的数据会被复制到剪贴板中。
  2. 切换至 Network 面板,找到相应的请求,右键点击并选择 Edit and Resend,然后将解密后的数据粘贴到 Request Payload 中,并重新发送请求即可。

请注意,这只是一个简单的示例,实际上,你需要根据你们接口响应的加密方式和自己的解密算法来实现该功能。如果你想在插件中实现该功能,可以通过监听网络请求,获取到接口响应后进行解密并覆盖 network 数据。你可以参考 Chrome 扩展程序开发文档来实现这一点。