PAC文件规则
Intro
代理自动配置(PAC)文件是一个 JavaScript 脚本,其核心是一个 JavaScript 函数,用来决定网页浏览请求(HTTP、HTTPS,和 FTP)应当直连目标地址,还是被转发给一个网页代理服务器并通过代理连接。
函数
PAC文件中必须包含一个函数
1 | function FindProxyForURL(url, host){ |
参数url是用户输入的url,参数host是url中的主机名。
一个最简单的PAC文件内容如下:
1 | function FindProxyForURL(url, host) { |
这个PAC文件实际上什么也没做,对任何URL,都将”DIRECT”(直接连网)。
参数
url
要访问的 URL。URL 中类似 https:// 这样的的路径和查询组件已被去除。在 Chrome 浏览器(版本 52 至 73)中,你可以通过设置 PacHttpsUrlStrippingEnabled 为 false 来禁止这种行为,或者以 --unsafe-pac-url 命令行参数启动(自 Chrome 74 起,仅命令行参数有效,且在 Chrome 75 及之后的版本中无法禁用这种行为;至于 Chrome 81,路径剥离对 HTTP URL 不适用,但有意改变这一行为以适应 HTTPS);在 Firefox 浏览器中,对应的选项是 network.proxy.autoconfig_url.include_path。
host
从 URL 中提取得到的主机名。这只是为了方便;它与 :// 之后到第一个 : 或 / 之前的字符串相同。端口号不包括在此参数中,必要时可以自行从 URL 中提取。
返回值
返回值格式
FindProxyForURL()函数返回一个字符串- 如果那个字符串为空,则不使用任何代理
- 字符串中可以包含如下任意数量的“代理配置块”(building blocks),用分号分隔:
如果返回值是一个代理
- DIRECT
- PROXY host:port
- SOCK5 host:port
返回一个指定的代理
1 | function FindProxyForURL(url, host) { |
返回http代理,并指定代理服务器和端口。
返回多个代理
1 | function FindProxyForURL(url, host) { |
返回值表示的含义:
- 对所有URL,都直接连接;
- 如果不能直接连接,那么就使用192.168.1.1:3128这个http代理连接;
- 如果还是不能连接,则使用lilinux.net:1080这个socks5代理连接。
使用不同连接的顺序和语句中的顺序一致,你可以根据自己的实际情况更改。
样例
1 | var Proxy = "PROXY 127.0.0.1:10808; SOCKS 127.0.0.1:10809; DIRECT;"; |
这有一个简单的PAC文件参考。
如果host在domain数组里,就执行代理操作否则直连
注意语法错误 如果PAC文件语法出现错误,无法返回代理
其他函数
PAC文件中还可以调用JavaScript其他函数
GFWLIST.PAC
Github:https://github.com/petronny/gfwlist2pac
Automatically convert gfwlist to pac everyday
Just use https://raw.githubusercontent.com/petronny/gfwlist2pac/master/gfwlist.pac
Proxys / CDNs:
- jsDelivr: https://cdn.jsdelivr.net/gh/petronny/gfwlist2pac@master/gfwlist.pac
- FastGit: https://raw.fastgit.org/petronny/gfwlist2pac/master/gfwlist.pac
- GitHub Proxy: https://ghproxy.com/https://github.com/petronny/gfwlist2pac/blob/master/gfwlist.pac
- 7ED SERVICE: https://raw.sevencdn.com/petronny/gfwlist2pac/master/gfwlist.pac

