Sky Watch

Pac 自动代理配置

今天在网上乱逛,不小心看到一个自动代理配置脚本(就是传说中的 pac 文件),发现语法怎么就和 Java 那么像呢~~?Google 一番之后发现其实 pac 就是一个 Javascript 函数,名叫 FindProxyForURL。它接收两个参数,urlhost,都是字符串。url 是浏览器将要进入的地址,host 就是地址中 :// 和第一个 / 之间的部分。返回值为一个字符串,有三种情况:

  • 直接连接,不经过代理,返回 "DIRECT"
  • 经过代理,返回 "PROXY host:port"
  • 经过 socks 服务器,返回 "SOCKS host:port"

有了这些规则,我们就可以随意加入逻辑,一劳永逸地解决是否使用代理,何时使用代理,使用什么代理等一系列重大问题。比如,我要对 blogspot 使用 72.14.219.190,其他某些倒霉的地址使用 Tor,剩下的碌碌无为的地址不使用代理,就可以用下面这个 pac。

:::Javascript
function FindProxyForURL(url, host)
{   
    url = url.toLowerCase();
    host = host.toLowerCase();

    if(dnsDomainIs(host, ".blogspot.com"))
        return "PROXY 72.14.219.190:80";

    if(dnsDomainIs(host, ".wikipedia.org") ||
       dnsDomainIs(host, ".technorati.com")
       )
        return "SOCKS 127.0.0.1:9050";

    return "DIRECT";
}

Reference: http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html#dnsDomainIs。Netscape 真是有长者风范啊~~