Chrome 72+ 似乎不再接受 --proxy-pac-url

Chrome 72+ 似乎不再接受 --proxy-pac-url

我在几台 Windows PC 上都有一个指向 Chrome 的快捷方式--proxy-pac-url

快捷方式属性中的完整Target:字段如下所示:

"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --proxy-pac-url=file://C:/Local/Drive/Path/To/proxy.pac

一台电脑始终处于开机状态,很长时间没有重启 Chrome。它仍然运行 Chrome 71。在这台电脑上.pac仍然可以使用,我可以访问动态代理资源。在其余电脑上,Chrome 已更新到 72 并重新启动,它不再工作 - Chrome 尝试直接访问资源并失败。此外,我无法调试它,因为chrome://net-internals/#proxy除了重新应用/清除按钮外,显示没有任何信息。

那么,到底出了什么问题?我该如何调试这个问题?如何让 Chrome 的特定实例.pac再次以特定方式运行?当然,不必总是手动切换选项。

答案1

铬 72-75:

  • 正如本文所建议的错误报告,您可以禁用 chrome://flags 中的“启用网络服务”以恢复支持 file:// pac 文件的旧行为。从命令行启动 Chrome--disable-features=NetworkService具有相同的效果。

Chrome 76:

  • 似乎“网络服务”选项已被删除chrome://flags(见代码提交)。

    您仍然可以使用--disable-features=NetworkService(运行 Chrome參考)(例如/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --disable-features=NetworkService在 Mac 上),它似乎可以正常读取 PAC 文件,尽管可能存在一些问题(因为许多相关代码似乎已被删除 - 请参阅此问题- 我想,情况可能有所不同,而且这不会是一个长期的解决方案。

    正如所建议的那样错误报告,您最好安装一个允许您定义 PAC 设置的浏览器插件,或者使用 http(s) PAC 文件。

答案2

我知道这是一个老话题但它在 Google 搜索结果中仍然排名很高。

我仍然可以成功使用本地 .pac 文件Linux 中的 Chrome 和 Chromium 97。我正在使用以下 Chrome:

--proxy-pac-url='data:application/x-javascript-config;base64,'$(base64 -w0 /path/to/local/proxy.pac)

这基本上将 .pac 文件编码为 base64 字符串并将其加载,就好像它是某些 Web 响应一样。

如果您想在 Windows 上使用它,请参阅@TBGs 回答

答案3

由于某种原因,Chrome 删除了 net-internals 的几乎所有功能,听起来他们删除了您正在使用的 pac 标志。

chromium 文档链接到此站点,该站点仍将该标志列为有效。

https://peter.sh/experiments/chromium-command-line-switches/

答案4

@jonny 的回答非常有效!(将代理 pac 内容编码为 Base64

但是,如果您使用的是 Windows 并且有同样的需求,这里有一个您可以使用的小型 Powershell 脚本:

$proxyPacURL = "http://YOUR_URL/proxy.pac";
$proxyPacBytes = (Invoke-webrequest -URI $proxyPacURL).Content;
$proxyPacBase64 = [Convert]::ToBase64String($proxyPacBytes);
& 'C:\Program Files\Google\Chrome\Application\chrome.exe' --proxy-pac-url='data:application/x-javascript-config;base64,'$proxyPacBase64;
stop-process -Id $PID;

相关内容