【发布时间】:2017-10-17 17:17:51
【问题描述】:
深入研究我的第一个 chrome 扩展,并试图弄清楚如何修改 http 请求中的一些数据。
我在这里使用文档:https://developer.chrome.com/extensions/webRequest
我能够设置扩展程序来监听请求,但无法访问我想要的数据。
当我使用 chrome 开发工具时,在“网络”选项卡上,我右键单击要修改的特定请求并将其复制为 cURL。我要修改的数据显示在--data 之后。我想访问它并更改其中一个参数设置为的整数值。
我不确定这些 http 请求的等价物是什么,但我尝试了以下方法:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
var bkg = chrome.extension.getBackgroundPage();
bkg.console.log("onBeforeRequest");
bkg.console.log(JSON.stringify(details));
blockingResponse = {};
return blockingResponse;
},
{urls: [/*URL*/]},
['requestBody','blocking']
);
我可以在开发工具的“网络”选项卡中找到带有我正在查看的 url 的请求,因此我将能够解析它并确保我只修改我想要的请求,但是打印详细信息不会显示我实际想要修改的数据。知道如何获取与 cURL 请求的 --data 参数等效的 HTTP 请求吗?而且,好吧,修改它。
编辑:这是我取得的进展。
当我记录这些详细信息时,我会收到 ..."requestBody":{"raw":[{"bytes":{}}]},...
但是,如果我将 onBeforeRequest 更改为:
chrome.webRequest.onBeforeRequest.addListener(
function(details) {
var bkg = chrome.extension.getBackgroundPage();
bkg.console.log("onBeforeRequest");
bkg.console.log(JSON.stringify(details));
var encodedData = getBase64FromArrayBuffer(details.requestBody.raw[0].bytes);
bkg.console.log("unencoded data: " + details.requestBody.raw[0].bytes);
bkg.console.log("encodedData: " + encodedData);
blockingResponse = {};
return blockingResponse;
},
{urls: ["*://*.facebook.com/*"], types: ["xmlhttprequest"]},
['requestBody','blocking']
);
function getBase64FromArrayBuffer(responseData) {
var uInt8Array = new Uint8Array(responseData);
var i = uInt8Array.length;
var binaryString = new Array(i);
while (i--)
{
binaryString[i] = String.fromCharCode(uInt8Array[i]);
}
var data = binaryString.join('');
var base64 = window.btoa(data);
return base64;
}
存在编码数据,显示一长串字符,尽管它是乱码。这是否意味着我将无法访问和修改这些数据?或者有没有办法解码这些数据?
【问题讨论】:
-
如果你已经有base64,那么使用
decodeURIComponent(atob(encodedData))解码 -
我是个大傻瓜,没有意识到 base64 是它出现乱码的原因。我已成功将其转换为字符串并对其进行解析以修改我的数据。您是否有机会知道如何将其作为新数据发送?
details.requesetBody.raw[0].bytes = <new array buffer>;足够了吗,如果我用我的新字符串创建一个新的数组缓冲区,或者还有其他隐藏的东西我会丢失吗? -
我不确定,但看起来您无法发送修改后的正文。这取自文档:“onBeforeRequest 可用于取消或重定向请求”。
-
bugs.chromium.org/p/chromium/issues/detail?id=91191# 看来修改 POST 数据的能力即将到来,但是分配给他们的功能的人被转移到其他地方并在上面坐了 2 年,然后才发布它去年 12 月,没有人恢复过时的功能。唉,没有Thankful Reacts 只有Chrome 扩展可以将所有FB 喜欢变成Thankful Reacts。我想我现在要去学习如何构建 FireFox 扩展。
标签: javascript google-chrome google-chrome-extension