Как правильно реализовать функцию повторного входа в систему прокси в расширении для браузера Chrome?

Можете помочь мне с созданием расширения, которое обеспечивает возможность динамической смены прокси-серверов с использованием сисitemтемы аутентификации через имя пользователя и пароль?
  • 30 ноября 2023 г. 19:11
Ответы на вопрос 2
Сначала вам потребуется создать файл манифеста с именем `manifest.json`. Этот файл будет содержать основную информацию о вашем расширении и разрешения:

```json
{
  "manifest_version": 2,
  "name": "Динамическая смена прокси",
  "version": "1.0",
  "permissions": [
    "proxy",
    "tabs",
    "webRequest",
    "webRequestBlocking"
  ],
  "background": {
    "scripts": [
      "background.js"
    ]
  }
}
```

Таким образом, у вас есть файл `background.js`, в котором вы будете обрабатывать вход в систему и установку прокси. Здесь вы можете использовать API `chrome.proxy` для управления прокси Chrome.

Сначала давайте настроим прокси. У вас должен быть список прокси-серверов и учетных данных для входа в систему, чтобы это работало.

```javascript
var config = {
    mode: "fixed_servers",
    rules: {
        singleProxy: {
            scheme: "http",
            host: "YOUR_PROXY_ADDRESS",
            port: parseInt("YOUR_PROXY_PORT")
        },
        bypassList: ["foobar.com"]
    }
};

chrome.proxy.settings.set({value: config, scope: 'regular'}, function() {
    console.log("Proxy settings set!");
});
```

Чтобы настроить аутентификацию, вы можете использовать API `chrome.webRequest` и обработку события `onAuthRequired`. Чтобы войти в систему, вам необходимо создать обработчик для возвращения обещания с учетными данными.

```javascript
chrome.webRequest.onAuthRequired.addListener(
    function(details, callbackFn) {
        console.log("Proxy auth event fired!");
        var loginInfo = {
            username: "YOUR_USERNAME",
            password: "YOUR_PASSWORD"
        };
        callbackFn(loginInfo);
    },
    {urls: ["<all_urls>"]},
    ['blocking']
);
```

В этом примере кода мы сначала устанавливаем настройки прокси, используя адрес и порт вашего прокси-сервера. Затем мы обрабатываем событие аутентификации, используя имя пользователя и пароль от вашего прокси-сервера.

Это только простой пример и он не будет работать без ваших собственных параметров прокси, и вам нужно будет реализовать свою собственную систему для хранения и выбора прокси-серверов и учетных данных.
Ты не учел, что при каждом установлении прокси, ты одновременно устанавливаешь новый обработчик авторизации chrome.webRequest.onAuthRequired.addListener. Старые обработчики не исчезают, они продолжают работать и вызываются каждый раз при авторизации. Ты забываешь удалить старые обработчики с помощью chrome.webRequest.onAuthRequired.removeListener. Твой код нуждается в изменении - обработчик chrome.webRequest.onAuthRequired.addListener должен устанавливаться только один раз за все время работы фонового процесса background.js. Либо, перед установкой нового обработчика, удаляй старые. 
Похожие вопросы