Я могу использовать Google Chrome под Linux Mint через прокси. Но при запуске браузера мне каждый раз приходится вводить имя пользователя и пароль для аутентификации.
Можно ли как-то установить имя пользователя и пароль при запуске браузера?
Я уже пробовал:
chrome --proxy-server="username:password@yourIP:PORT"
(например, )chrome --proxy-server="username:[email protected]:8080"
Это не сработало.
решение1
Примечаниеследующее:
Файлы автоконфигурации прокси не поддерживают жестко закодированные имена пользователей и пароли. Для этого также есть веские основания, поскольку поддержка жестко закодированных учетных данных откроет значительные дыры в безопасности, поскольку любой сможет легко просмотреть требуемые учетные данные для доступа к прокси.
Вместо этого настройте прокси как прозрачный прокси, тогда вам не понадобятся имя пользователя и пароль. В одном из комментариев вы упоминаете, что прокси-сервер находится за пределами вашей локальной сети, поэтому вам требуется аутентификация. Однако большинство прокси поддерживают правила на основе исходного IP, и в этом случае все просто — разрешать только запросы, исходящие из вашей корпоративной сети.
Первоначальная спецификация автоконфигурации прокси была первоначально разработана Netscape в 1996 году. Первоначальная спецификация больше не доступна напрямую, но вы все еще можете получить к ней доступ с помощью The Wayback Machineархивная копия. Спецификация не сильно изменилась и по-прежнему во многом такая же, какой была изначально. Вы увидите, что спецификация довольно проста, и что в ней нет положений для жестко закодированных учетных данных.
Чтобы решить эту проблему - вы можете использовать этот инструмент:
https://github.com/sjitech/proxy-login-automator
Этот инструмент может создать локальный прокси и автоматически вставить пользователя/пароль в реальный прокси-сервер. Поддержка скрипта PAC.
решение2
Если вы находитесь в режиме headless, вы можете использовать протокол devtools, чтобы указать имя пользователя и пароль для прокси-сервера.
Это можно сделать, включив setRequestInterception
и выполнив continueInterceptedRequest
действие authChallengeResponse
по запросу.
Я PHP-специалист и используюhttps://github.com/chrome-php/chrome/, но я надеюсь, что мой пример сможет дать вам некоторые идеи:
// enable request interception (important!!!)
// it allows the browser to inform us that we need to complete a username/password authorization.
$page->getSession()->sendMessageSync(new Message('Network.setRequestInterception', ['patterns' => [['urlPattern' => '*']]]));
// this method allows you to approve or block request (we are only approving here)
$page->getSession()->on('method:Network.requestIntercepted', function (array $params): void {
// the browser is letting us know that we need to provide proxy (or 401) credentials (normally, happens only once)
if (isset($params["authChallenge"])) {
// approving request and sending username/password
$page->getSession()->sendMessageSync(
new Message('Network.continueInterceptedRequest', ['interceptionId' => $params["interceptionId"], 'authChallengeResponse' => ['response' => 'ProvideCredentials', 'username' => "proxy_username", 'password' => "proxy_password"]])
);
} else {
// simply approving request
$page->getSession()->sendMessageSync(
new Message('Network.continueInterceptedRequest', ['interceptionId' => $params["interceptionId"]])
);
}
});
решение3
Я пробовал различные подходы CLI, но не смог заставить его работать с аутентификацией. Однако,Расширение Switchy OmegaПока работает отлично.