转-IE浏览器自动配置代理脚本-Proxy.PAC文件及PAC相关语法

用笔记本上网时,往返家里和单位,由于单位是用的代理上网,家里是直接链接.所以每次都要修改IE的代理设置,虽然是个小事,可是每次都要修改老是有点烦 ,因而参考GOOGLE,写了一个自动配置代理的脚本.这样不管在家和在公司,只要连上局域网就能够上网了 .html

function FindProxyForURL(url,host) {
if((isPlainHostName(host))||shExpMatch(url,"http://127.0.0.1/*")||isInNet(host,"192.168.0.0", "255.255.255.0")) {
return "direct";
} else {
   if(myIpAddress()=="192.168.0.49")
    return "PROXY 192.168.0.6:808";
else
   return "direct";
}
}服务器


把以上代码另存为proxy.pac的文件,如:c:\proxy.pac,而后在IE的菜单里"工具"->"INTEL选项"->"链接"->局域网设置

把使用自动配置脚本选上,而后在地址栏填入file://c:/proxy.pac,注意file后是两斜杠,要使设置生效,须要关闭IE再从新打开.

如今咱们介绍下这个proxy.pac脚本文件,脚本的语法是js语法,js的内置函数可使用,要实现自动配置代理,须要实现FindProxyForURL这个函数,其参数url表明要访问的链接,host表明要访问链接的主机名,该函数有三个返回参数
direct:直接链接
proxy IP:PORT
socket IP:PORT
返回结果大小写不敏感

PAC的其余内置语法见http://wp.netscape.com/eng/mozilla/2.0/relnotes/demo/proxy-live.html负载均衡

PAC脚本另一个重要的应用是多台代理服务器并存的状况下,经过pac脚本的控制:dom

·         用户随机选择使用多台代理服务器中的任意一台来达到流量负载均衡的目的;socket

·         管理员经过PAC脚本控制用户使用和不使用某台代理服务器,这样能够空出时间对代理服务器进行维护;函数

·         让服务器工做在主备模式,当主服务器宕机时,会自动切换到其它备用服务器而不会中断服务;工具

·         根据访问目的地的不一样,自动选择最佳代理服务器。学习


下面列举几个PAC的实例,顺便学习下它的语法

a、isPlainHostName(host),本例演示判断是否为本地主机,如http://myservername/
的方式访问,若是是直接链接,不然使用代理url

function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else
return "PROXY proxy:80";
}.net



b、dnsDomainIs(host, "")、localHostOrDomainIs(host, ""),本例演示判断访问主机
是否属于某个域和某个域名,若是属于.company.com域的主机名,而域名不是
www.company.com和home.company.com的直接链接,不然使用代理访问。

function FindProxyForURL(url, host)
{
if ((isPlainHostName(host) ||
dnsDomainIs(host, ".company.com")) &&
!localHostOrDomainIs(host, "www.company.com") &&
!localHostOrDomainIs(host, "home.company.com"))

return "DIRECT";
else
return "PROXY proxy:80";
}


c、isResolvable(host),本例演示主机名可否被dns服务器解析,若是能直接访问,否
则就经过代理访问。

function FindProxyForURL(url, host)
{
if (isResolvable(host))
return "DIRECT";
else
return "PROXY proxy:80";
}


d、isInNet(host, "", ""),本例演示访问IP是否在某个子网内,若是是就直接访问,
不然就经过代理,例子演示访问清华IP段的主页不用代理。

function FindProxyForURL(url, host)
{
if (isInNet(host, "166.111.0.0", "255.255.0.0"))
return "DIRECT";
else
return "PROXY proxy:80";
}



e、shExpMatch(host, ""),本例演示根据主机域名来改变链接类型,本地主机、*.edu、
*.com分别用不一样的链接方式。

function FindProxyForURL(url, host)
{
if (isPlainHostName(host))
return "DIRECT";
else if (shExpMatch(host, "*.com"))
return "PROXY comproxy:80";
else if (shExpMatch(host, "*.edu"))
return "PROXY eduproxy:80";
else
return "PROXY proxy:80";
}



f、url.substring(),本例演示根据不一样的协议来选择不一样的代理,http、https、ftp、
gopher分别使用不一样的代理。

function FindProxyForURL(url, host)
{
if (url.substring(0, 5) == "http:") {
return "PROXY proxy:80";
}
else if (url.substring(0, 4) == "ftp:") {
return "PROXY fproxy:80";
}
else if (url.substring(0, 7) == "gopher:") {
return "PROXY gproxy";
}
else if (url.substring(0, 6) == "https:") {
return "PROXY secproxy:8080";
}
else {
return "DIRECT";
}
}



g、dnsResolve(host),本例演示判断访问主机是否某个IP,若是是就使用代理,不然直
接链接。

function FindProxyForURL(url, host)
{
if (dnsResolve(host) == "166.111.8.237") {
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}



h、myIpAddress(),本例演示判断本地IP是否某个IP,若是是就使用代理,不然直接使
用链接。

function FindProxyForURL(url, host)
{
if (myIpAddress() == "166.111.8.238") {
return "PROXY proxy:80";
}
else {
return "DIRECT";
}
}



i、dnsDomainLevels(host),本例演示访问主机的域名级数是几级,就是域名有几个点
若是域名中有点,就经过代理访问,不然直接链接。

function FindProxyForURL(url, host)
{
if (dnsDomainLevels(host) > 0) { // if number of dots in host > 0
return "PROXY proxy:80";
}
return "DIRECT";
}



j、weekdayRange(),本例演示当前日期的范围来改变使用代理,若是是GMT时间周三
到周六,使用代理链接,不然直接链接。

function FindProxyForURL(url, host)
{
if(weekdayRange("WED", "SAT", "GMT"))
return "PROXY proxy:80";
else
return "DIRECT";
}



k、最后一个例子是演示随机使用代理,这样能够好好利用代理服务器。

function FindProxyForURL(url,host){return randomProxy();}function randomProxy(){switch( Math.floor( Math.random() * 5 ) ){case 0:return "PROXY proxy1:80";break;case 1:return "PROXY proxy2:80";break;case 2:return "PROXY proxy3:80";break;case 3:return "PROXY proxy4:80";break;case 4:return "PROXY proxy5:80";break;}}

相关文章
相关标签/搜索