【发布时间】:2020-06-21 17:21:33
【问题描述】:
使用browser.webRequest.onBeforeRequest.addListener() 我能够过滤HTTP 请求并在返回页面之前修改它们的来源。我需要拦截 HTTP POST 请求并修改表单提交的数据,然后再将其发送到服务器。检查代码:
browser.webRequest.onBeforeRequest.addListener(
function(details) {
// The code in this if is just some experimentation.
if(details.method == "POST") {
let filter = browser.webRequest.filterResponseData(details.requestId)
let decoder = new TextDecoder("utf-8")
let encoder = new TextEncoder()
filter.ondata = event => {
let str = decoder.decode(event.data, {
stream: true
});
console.log(str)
}
// This is a where I attempt to modify POST data.
let formData = details.requestBody.formData;
//console.log(formData)
if(formData) {
Object.keys(formData).forEach(key => {
formData[key].forEach(value => {
//console.log(key)
if(key == 'testField'){
//console.log("found", formData[key])
details.requestBody.formData[key] = "INJECTED"
console.log('injected', details.requestBody.formData[key])
}
})
})
}
return {details: details};
}
},
{urls: ["https://example.com/*"]},
["blocking", "requestBody"]
);
最后一个console.log 打印修改后的值,但返回details 不会将修改后的值转发到服务器。如何在 Firefox 扩展中使用onBeforeRequest(或任何其他方法)在将 POST 变量发送到服务器之前对其进行修改?
我不想将代码注入网页。我想过滤流量。
【问题讨论】:
标签: javascript firefox firefox-addon firefox-addon-webextensions