2010年9月17日星期五

适用于多浏览器的PAC脚本配置


PAC脚本是一种自动切换代理的JS脚本,利用一个FindProxyForURL的JS函数。这个函数有三种可能的字符串返回值,一是"DIRECT",就是直接连接,不通过代理;二是"PROXY proxyaddr:port",其中proxyaddr和port分别是代理的地址和代理的端口;三是"SOCKS socksaddr:port",其中socksaddr和port分别是socks代理的地址和端口,一个自动代理文件可以是多个选择的组合,其中用分号“;”隔开
如:function FindProxyForURL(url,host)
{
if (host == "www.mydomain.com")
return "DIRECT";
return "PROXY myproxy:80;PROXY myotherproxy:8080;DIRECT";
}
一般我们都是同过SSH代理来配置,可是每一个浏览器支持的SOCKS代理的方式不一样, 比如IE 和Safari仅支持SOCKS方式,而Chrome和FireFox 仅支持SOCKS5方式。 所以利用上面的函数,通过返回值中添加SOCKS和SOCKS5两种组合,然后浏览器们各取所需,就可以一个脚本全浏览器通用了。(ie6 不支持)
范例:
function FindProxyForURL( url, host )
{
if ( shExpMatch(url, "*example1.com*") || shExpMatch(url, "*test2.com*") )
return "SOCKS5 127.0.0.1:7070; SOCKS 127.0.0.1:7070";
else
return "DIRECT";
}

这样浏览器就会从SOCKS 和SOCKS5 中挑选合适的方式进行代理了。

所以Chrome 可以不用装Switchy插件 ,FireFox也不需要装额外的代理插件,直接通过你系统所设置的自动代理PAC脚本上网了。

参考文献:

2 条评论:

  1. 太强了,顶!我就奇怪怎么safari不支持pac文件,原来是socks的语法不同。

    回复删除
  2. 非常感谢。之前的PAC,必须再加一层http Proxy才能转发Socks到SSH服务器。你的这个PAC脚本经过修改端口,能在Firefox5/Chrome14上面正常运行:“return "SOCKS5 127.0.0.1:7070; SOCKS 127.0.0.1:7070";”。

    而先前“return "SOCKS 127.0.0.1:8001;DIRECT;";”就会遇到Tunnelier4.40的错误提示。

    回复删除