ביישומי Electron עדכניים, תנו לכל WebContentsView המשויך לחשבון הפעלה בעלת שם משלו. לאחר שהאפליקציה מוכנה, עוזר אסינכרוני בתהליך הראשי יכול להגדיר תצוגה אחת:

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: יוצר הפעלה בזיכרון. שימוש חוזר באותו מחיצה עושה שימוש חוזר במצב ההפעלה שלו בכוונה.

חברו את התצוגה לחלון הקיים ונווטו רק לאחר שהפרוקסי והמטפל שלה מוכנים. הקוד מכוון לחוזה אירוע ה-login הנוכחי, כולל firstAuthAttempt, ומבטל ניסיון חוזר שנדחה במקום לשלוח שוב את אותו חשבון ללא הגבלה.

המטפל בודק שהאתגר מגיע מפרוקסי Basic HTTP המיועד. התחברות לאתר אינה זכאית לאותם פרטי גישה.

כללי פרוקסי בוחרים את נקודת הקצה; login מספק את החשבון. קבצי PAC וכללי פרוקסי ידניים אינם נושאים בעצמם את הסיסמה של callback זה.

זהו אימות פרוקסי HTTP. הוא אינו מוסיף אימות SOCKS5 ל-Chromium. חיבורי הפעלה קיימים זקוקים גם לטיפול הרגיל במחזור החיים כאשר מסלול משתנה מאוחר יותר.

מאמרים קשורים