Я разрабатываю расширение Chrome для прокси-серверов. Я получаю список серверов (и данных авторизации) через API, после того как я установил IP и PORT в настройки chrome:
connect: function(proxyData, callback) {
this.setListener(proxyData);
chrome.proxy.settings.set(
{
value: {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: "http",
host: proxyData.ip,
port: parseInt(proxyData.port)
},
}
},
scope: 'regular'
},
function() {
if (typeof callback === 'function') {
callback(proxyData);
}
}
);
}
После этого я добавляю слушатель авторизации:
setListener: function(proxyData) {
let username = proxyData.username,
password = proxyData.password;
this.proxyAuthFunction = function(details, callbackFn) {
console.log(username, password, 'Init proxy auth function');
callbackFn({authCredentials: { username: username, password: password}});
};
if (chrome.webRequest.onAuthRequired.hasListener(this.proxyAuthFunction)) {
chrome.webRequest.onAuthRequired.removeListener(this.proxyAuthFunction);
}
chrome.webRequest.onAuthRequired.addListener(
this.proxyAuthFunction,
{urls: ["<all_urls>"]},
["asyncBlocking"]
);
}
Это нене работает, и браузер все равно запрашивает базовую авторизацию.
Но жесткий код работает хорошо, и браузер не запрашивает базовую авторизацию:
setListener: function(proxyData) {
let username = 'qwerty',
password = 'qwerty';
this.proxyAuthFunction = function(details, callbackFn) {
console.log(username, password, 'Init proxy auth function');
callbackFn({authCredentials: { username: username, password: password}});
};
if (chrome.webRequest.onAuthRequired.hasListener(this.proxyAuthFunction)) {
chrome.webRequest.onAuthRequired.removeListener(this.proxyAuthFunction);
}
chrome.webRequest.onAuthRequired.addListener(
this.proxyAuthFunction,
{urls: ["<all_urls>"]},
["asyncBlocking"]
);
}
Кто-нибудь сталкивался с подобной проблемой?