Electron వీక్షణలకు ప్రత్యేక HTTP ప్రాక్సీ ఖాతాలు ఉండవచ్చు
ప్రతి WebContentsView కోసం ఖాతా-నిర్దిష్ట సెషన్ సృష్టించి, ఆ వీక్షణకు సరిపోయే Basic ప్రాక్సీ సవాలుకు మాత్రమే స్పందించండి.
ప్రస్తుత Electron యాప్లలో, ఖాతాతో అనుసంధానించబడిన ప్రతి WebContentsView కి దాని స్వంత పేరున్న సెషన్ ఇవ్వండి. యాప్ సిద్ధమైన తర్వాత, ప్రధాన ప్రక్రియలోని async సహాయకుడు ఒక వీక్షణను కాన్ఫిగర్ చేయగలడు:
const routeSession = session.fromPartition(partitionName);
await routeSession.setProxy({
mode: 'fixed_servers',
proxyRules: `http://${proxyHost}:${proxyPort}`,
});
const view = new WebContentsView({
webPreferences: { session: routeSession },
});
view.webContents.on('login', (event, details, authInfo, callback) => {
if (!authInfo.isProxy
|| authInfo.scheme.toLowerCase() !== 'basic'
|| authInfo.host !== proxyHost
|| authInfo.port !== proxyPort) return;
event.preventDefault();
if (details.firstAuthAttempt) callback(proxyUser, proxyPassword);
else callback();
});
ప్రతి వేరు చేయబడిన ఖాతాకు వేరే partitionName ఇవ్వండి మరియు లిజనర్ వేరియబుల్స్ను ఆ వీక్షణ యొక్క స్వంత closure లో ఉంచండి. persist: లేని పేరు మెమరీలోని సెషన్ను సృష్టిస్తుంది. అదే విభాగాన్ని మళ్లీ ఉపయోగించడం దాని సెషన్ స్థితిని ఉద్దేశపూర్వకంగా మళ్లీ ఉపయోగిస్తుంది.
వీక్షణను ఉన్న విండోకు జోడించి, దాని ప్రాక్సీ మరియు హ్యాండ్లర్ సిద్ధమైన తర్వాత మాత్రమే నావిగేట్ చేయండి. కోడ్ firstAuthAttemptతో సహా ప్రస్తుత login ఈవెంట్ ఒప్పందాన్ని లక్ష్యంగా చేసుకుంటుంది మరియు తిరస్కరించబడిన పునరావృత ప్రయత్నాన్ని అదే ఖాతాను అనంతంగా మళ్లీ పంపడం బదులు రద్దు చేస్తుంది.
హ్యాండ్లర్ సవాలు ఉద్దేశించిన Basic HTTP ప్రాక్సీ నుండి వచ్చిందో లేదో తనిఖీ చేస్తుంది. వెబ్సైట్ లాగిన్ ఆ ఆధారాలకు అర్హత కలిగినది కాదు.
ప్రాక్సీ నియమాలు ఎండ్పాయింట్ను ఎంచుకుంటాయి; login ఖాతాను అందిస్తుంది. PAC ఫైళ్లు మరియు మాన్యువల్ ప్రాక్సీ నియమాలు ఈ callback యొక్క పాస్వర్డ్ను తామే కలిగి ఉండవు.
ఇది HTTP ప్రాక్సీ ప్రామాణీకరణ. ఇది Chromium కు SOCKS5 ప్రామాణీకరణను జోడించదు. తర్వాత మార్గం మారినప్పుడు ఉన్న సెషన్ కనెక్షన్లకు కూడా వాటి సాధారణ జీవితచక్ర నిర్వహణ అవసరం.