标签归档:pac

Chrome 使用 pac 来自动代理

2018-08-21 更新:这是很早之前的文章,现在 Chrome 的 proxy 插件不少了,不再需要修改命令

之所以有此文,是因为忘记在哪个版本起 Chrome 的如 ProxySwitchy 等扩展就有问题了,在代理方面很有问题,没有 Firefox 下的 autoproxy 稳定。在过了一阵子需要翻只能开 FF 的时间后,决定还是看看 Chrome 下该如何解决这个问题。

查看 chromium / google-chrome 的帮助命令,将可以看到和代理(proxy)有关的有:

--proxy-server=host:port
--no-proxy-server
--proxy-auto-detect
--proxy-pac-url=URL

可以看到,Chrome 是支持指定 pac 文件来自动代理的。这样,便可以使用 使用 pac 文件来实现自动代理 一文提到的 pac 文件了。

这样,便可以通过类似下面的命令来启动带自动代理功能的 Chrome 了。

google-chrome --proxy-pac-url=file:///home/user/autoproxy.pac

对于 Windows 环境,直接把 --prox-pac-url=pac-file-path 参数加到快捷方式属性中的『目标』属性的后面即可。

对于 Ubuntu 环境,Chromium 可以通过把这个参数写进 /etc/chromium-browser/default 文件中的 CHROMIUM_FLAGS 变量;对于 google-chrome,暂时没找到方便写配置的地方,干脆直接写个 sh 文件,把整条命令加进去吧(可在命令后加 & 来达到终端关闭浏览器依然存在的目的)。

使用 pac 文件来实现自动代理

pac(proxy autoconfiguration)文件其实就是一个 JavaScript 文件,文件扩展名是什么其实没有关系,但一般都名为 pac

pac 文件中必须包含 FindProxyForURL(url, host) 的函数,支持 pac 自动代理的浏览器将会根据这个函数来判断当前访问的网址走何种通道。最简单的示例如下

function FindProxyForURL(url, host) {
    return 'DIRECT';
}

上面那段代码说明对于所有 url,都直连,不走任何代理。

FindProxyForURL 函数除了可以返回 “DIRECT” 外,还可以返回指定类型、主机和端口的代理。如:

// 本地 3721 端口的 http 代理
"PROXY 127.0.0.1:3721"

// 本地 8080 端口的 socks5 代理
"SOCKS5 127.0.0.1:8080"

可以同时指定多个方式,从第一种开始,一种无法连接使用下一种,直到成功或最后失败,如:

return "PROXY 127.0.0.1:3721; SOCKS5 127.0.0.1:8080; DIRECT";

继续阅读