gpt4 book ai didi

webview - 如何动态连接到 Electron webview 中的代理

转载 作者:行者123 更新时间:2023-12-02 18:54:38 29 4
gpt4 key购买 nike

我正在使用 Electron 创建简单的网络浏览器。我的用例是我需要通过不同/各自的代理 IP 路由每个 URL。如果用户输入 google.com,则必须通过 123.123.122.1:8081 进行路由,如果用户输入 gmail.com,则必须通过 123.123.122.1:8081 进行路由111.111.111.123:8080 [代理/端口]。我看到了这个http://stackoverflow.com/questions/37393248/how-connect-to-proxy-in-electron-webview? rq=1 但它不会动态更改代理。是否可以在 Electron 中做到这一点。

最佳答案

有两种方法可以解决这个问题。您可以使用 proxy.pac 方法或 session /代理规则来更改代理

保持 session 方法:

var proxyIp ='12.12.133.12’
var port =‘8080’

<webview id="wv1" src="https://github.com" partition="persist:webviewsession"></webview>

if(proxyIp.trim() =='noproxy'){
var my_proxy = 'direct://';
session.fromPartition('persist:webviewsession').setProxy({proxyRules:my_proxy}, function (){
console.log('using the proxy ' + proxyIp);
});

}else{
var my_proxy = "http://"+proxyIp+":"+port;
session.fromPartition('persist:webviewsession').setProxy({proxyRules:my_proxy}, function (){
console.log('using the proxy ' + proxyIp);
});
}

proxy.pac方法

代理.js

const {app, BrowserWindow} = require('electron');
const {session} = require('electron')
let mainWindow;
app.on('window-all-closed', function() {
app.quit();
});

app.on('ready', function() {
mainWindow = new BrowserWindow({width: 1024, height: 768 });
session.defaultSession.allowNTLMCredentialsForDomains('*')//to access internal sites

var myVar = setInterval(myTimer, 3000);
function myTimer() {
mainWindow.webContents.session.setProxy({pacScript:'file://' + __dirname + '/proxy.pac'}, function () {return true;});
}

mainWindow.webContents.session.setProxy({pacScript:'file://' + __dirname + '/proxy.pac'}, function () {mainWindow.loadURL('file://' + __dirname + '/browser.html');});
mainWindow.openDevTools();
});

代理.pac

function FindProxyForURL(url, host) {

if (shExpMatch(url, "*google*"))
return "PROXY 164.83.99.74:80";

if (shExpMatch(url, "*amazon*"))
return "PROXY 194.73.29.74:8080";

return "DIRECT";

}

Proxy.pac 文件可以位于某些 S3 位置或其他远程服务器或本地,因此即使您更改远程 proxy.pac 文件也会反射(reflect)在 Electron 工具中。 proxy.pac 方法的问题是当您更改时proxy.pac 中的代理 IP 您需要在 Electron 中重新加载 proxy.pac 文件,这就是我在上面的代码中每 3 秒重新加载一次的原因。

两者都可以正常工作,并且我自己都进行了测试。您可以根据您的用例使用任何一个。

详细讨论可以在这里找到 https://discuss.atom.io/t/how-to-set-proxy-for-each-webview-tag-in-electronjs/37307/2

Electron 文档:https://github.com/electron/electron/blob/master/docs/api/session.md#sessetproxyconfig-callback

来自 Electron 维护者的建议: https://github.com/electron/electron/issues/8247#issuecomment-268435712

关于webview - 如何动态连接到 Electron webview 中的代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40041412/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com