javascript - Electron interceptBufferProtocol 代理请求不起作用
问题描述
使用interceptBufferProtocol,我可以成功拦截到https://google.com mainWindow.loadURL("https://google.com/");
的loadURL 事件并将其替换为我的自定义HTML 代码。HTML 代码有一个我正在尝试代理的 iframe。这通常可以通过设置电子浏览器窗口代理来实现,但在我的情况下,它无法工作。我使用以下代码设置代理:
mainWindow.webContents.session.setProxy({
proxyRules: "http://" + proxy
}, () => {
console.log('Proxy: http://' + proxy)
})
截取url代码:
ses.protocol.interceptBufferProtocol('https', (req, callback) => {
ses.resolveProxy(req.url, (x) => {
console.log(x)
})
if (req.url == "https://google.com/") {
fs.readFile(path.join(__dirname, "/../../path/stuff.html"), 'utf8', function(err, html) {
callback(Buffer.from(html, 'utf8'));
});
} else {
const request = net.request(req)
request.on('response', res => {
const chunks = []
res.on('data', chunk => {
chunks.push(Buffer.from(chunk))
})
res.on('end', async () => {
const file = Buffer.concat(chunks)
callback(file)
})
})
if (req.uploadData) {
req.uploadData.forEach(part => {
if (part.bytes) {
request.write(part.bytes)
} else if (part.file) {
request.write(fs.readFileSync(part.file))
}
})
}
request.end()
}
})
但是,无论我做什么,它似乎都使用我的本地 IP 而不是代理。我有什么选择吗?
代码在没有代理的情况下运行良好。我正在尝试用一个来运行它。问题在于 .interceptBufferProtocol() 函数。任何帮助,将不胜感激!