首页 > 解决方案 > 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() 函数。任何帮助,将不胜感激!

标签: javascriptproxyelectronelectron-window

解决方案


推荐阅读