我可以在 Linux Mint 下通过代理使用 Google Chrome。但是每次启动浏览器时,我都必须输入用户名和密码进行身份验证。
有什么方法可以在启动浏览器时设置用户名密码吗?
我已经尝试过:
chrome --proxy-server="username:password@yourIP:PORT"
(例如,)chrome --proxy-server="username:[email protected]:8080"
这不起作用。
答案1
笔记下列:
代理自动配置文件不支持硬编码的用户名和密码。这背后也有很好的理由,因为提供对硬编码凭据的支持将带来重大的安全漏洞,因为任何人都可以轻松查看访问代理所需的凭据。
最好将代理配置为透明代理,这样就不需要用户名和密码了。您在一条评论中提到代理服务器位于 LAN 之外,这就是您需要身份验证的原因。但是,大多数代理都支持基于源 IP 的规则,在这种情况下,只需允许来自公司网络的请求即可。
最初的代理自动配置规范最初由 Netscape 于 1996 年起草。原始规范不再直接可用,但您仍可以使用 Wayback Machine 的存档副本。规范没有太大变化,与原来基本相同。您会发现规范非常简单,并且没有提供硬编码凭证。
为了解决这个问题 - 你可以使用这个工具:
https://github.com/sjitech/proxy-login-automator
该工具可以创建本地代理并自动将用户/密码注入真实代理服务器。支持PAC脚本。
答案2
如果您处于无头模式,您可以使用 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 扩展到目前为止运行良好。