我在几台 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;