Các view của Electron có thể có tài khoản proxy HTTP riêng
Tạo một phiên dành riêng cho từng tài khoản cho mỗi WebContentsView và chỉ trả lời thử thách Basic proxy khớp với view đó.
Trong các ứng dụng Electron hiện nay, hãy cấp cho mỗi WebContentsView gắn với tài khoản một phiên có tên riêng. Khi ứng dụng sẵn sàng, một trình trợ giúp async trong tiến trình chính có thể cấu hình một view:
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();
});
Cung cấp partitionName riêng cho từng tài khoản tách biệt và giữ các biến trình lắng nghe trong closure của chính view đó. Tên không có persist: tạo phiên trong bộ nhớ. Dùng lại cùng một phân vùng sẽ chủ động dùng lại trạng thái phiên của nó.
Gắn view vào cửa sổ hiện có và chỉ điều hướng sau khi proxy và trình xử lý của nó sẵn sàng. Mã nhắm tới hợp đồng sự kiện login hiện tại, bao gồm firstAuthAttempt, và hủy lần thử lặp lại bị từ chối thay vì gửi lại cùng tài khoản vô hạn.
Trình xử lý kiểm tra rằng thử thách đến từ proxy Basic HTTP dự định. Đăng nhập của một trang web không đủ điều kiện cho các thông tin xác thực đó.
Quy tắc proxy chọn điểm cuối; login cung cấp tài khoản. Tệp PAC và quy tắc proxy thủ công không tự mang mật khẩu của callback này.
Đây là xác thực proxy HTTP. Nó không thêm xác thực SOCKS5 vào Chromium. Các kết nối phiên hiện có cũng cần xử lý vòng đời thông thường khi tuyến đường thay đổi sau này.