Skip to main content

如何写PAC自动代理配置文件

我们在使用代理上网时,经常要去手动的配置浏览器或者系统的代理设置,但是也可以通过自动代理配置文件来自动配置。在这里教下大家如何自己写PAC自动代理配置文件,你看完后就会知道,原来写PAC自动代理配置文件其实很简单。

============================================================================================================

PAC自动代理配置文件

首先PAC文件是纯文本格式的,实际上就是JavaScript文件。一个最简单的PAC文件的内容如下:

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

在PAC自动代理配置文件中必须包含 FindProxyForURL(url, host)这个函数。在上面的例子中,FindProxyForURL(url, host)函数返回值为 "DIRECT" ,即什么也不做,直接DIRECT(直接联网)。

FindProxyForURL(url, host)的返回值

FindProxyForURL(url, host)函数返回值类型有以下几种:

  1. DIRECT
  2. PROXY proxysample.com:8080 或者 PROXY 10.12.8.196:8080
  3. SOCKS5 socks5sample.com:8080 或者SOCKS5 10.12.8.196:8080

返回值DIRECT为直接联网,即不使用代理设置联网。PROXY proxysample.com:8080即表示http代理的主机和端口,当然主机也可以用IP表示。SOCKS5 socks5sample.com:8080 即表示socks5代理的主机和端口,同样主机也可以用IP表示。

PAC自动代理配置文件示例

1.用PAC指定一个http代理时,pac 文件可以这么写:

function FindProxyForURL(url, host) {
return "PROXY 192.168.1.1:808";
}

表示通过http代理上网,代理服务器的地址和端口分别为192.168.1.1和808。

2.多个代理的pac 文件这么写:

function FindProxyForURL(url, host) {
return "DIRECT; PROXY 192.168.1.1:808; SOCKS5 proxy.lxx1.com:808";
}

表示首先不通过代理联网,如果无法连接则使用http代理,其次使用SOCKS5代理连接

3.特定网站使用代理

function FindProxyForURL(url, host) {
if (shExpMatch(url,"*.google.com/*")) {
return "PROXY 192.168.1.1:808";
}
if (shExpMatch(url, "*.wikipedia.com:*/*")) {
return "SOCKS5 proxy.lxx1.com:808";
}
if (isInNet(host, "10.0.0.0",  "255.0.0.0")){
return "DIRECT";
}
return "DIRECT; PROXY 192.168.1.1:808; SOCKS5 proxy.lxx1.com:808";
}

上面的PAC文件表示:

  1. 当url是*.google.com/* 时,自动使用PROXY代理;
  2. 当url是*.wikipedia.cm/*时,自动使用SOCKS5代理;
  3. 当host是10.0.0.0 /255.0.0.0的子网内时,自动直连;
  4. 如果都不匹配,则依次按DIRECT、PROXY、SOCKS5的次序尝试。