针对不同网页使用不同代理 —— IE自动配置脚本
1.前言
2.自动配置脚本简介
3.自动配置脚本语法
4.相关例子
         a、isPlainHostName(host)
         b、dnsDomainIs(host, "")、localHostOrDomainIs(host, "")
         c、isResolvable(host)
         d、isInNet(host, "", "")
         e、shExpMatch(host, "")
         f、url.substring()
         g、dnsResolve(host)
         h、myIpAddress()
         i、dnsDomainLevels(host)
         j、weekdayRange()
         k、随机使用代理

1.前言
有些朋友会问为什么tw没有自动代理的功能,其实IE本身就有这个功能,只要有一点点JS知识,你可以自己手动编写一个最适合自己的IE代理脚本。

2.自动配置脚本简介
自动配置脚本起的作用就是,当IE访问网页的时候会根据脚本文件里面界定的内容来访问。比方说,你在脚本文件里面限定了访问某些IP使用某个代理的时候,访问另外一些IP使用另外的代理,这就很方便通过脚本文件来完成。

3.自动配置脚本语法
一个PAC文件其实就是一个文本文件,最简单的格式就是包含一个叫FindProxyForURL的JScript函数,IE通过传入两个变量来调用这个函数,一个是用户浏览的地址URL全路经,一个是这个URL中的主机名部分(host)。

这个FindProxyForURL函数有三种可能的字符串返回值,一是"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";
}
把以上代码另存为proxy.pac的文件,如:e:\proxy.pac,然后在IE的菜单里"工具"->"INTEL选项"->"连接"->局域网设置

把使用自动配置脚本选上,然后在地址栏填入file://e:/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脚本的控制:

用户随机选择使用多台代理服务器中的任意一台来达到流量负载均衡的目的;
管理员通过PAC脚本控制用户使用和不使用某台代理服务器,这样可以空出时间对代理服务器进行维护;
让服务器工作在主备模式,当主服务器宕机时,会自动切换到其它备用服务器而不会中断服务;
根据访问目的地的不同,自动选择最佳代理服务器。
4.相关例子
下面列举几个PAC的实例
a、isPlainHostName(host),本例演示判断是否为本地主机,如http://myservername/
   的方式访问,如果是直接连接,否则使用代理
   function FindProxyForURL(url, host)
   {
     if (isPlainHostName(host))
       return "DIRECT";
     else
       return "PROXY proxy:80";
   }
 
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;
      }   
}

 » 转载请注明来源:电脑知识收藏夹 » 《IE自动配置脚本(PAC)》
 » 订阅本站:http://feed.x2009.net

您可能会对以下内容有兴趣:

  1. 使用Windows Update更新系统补丁时出现提示为0x801901F6的错误代码. 使用Windows Update更新系统补丁时出现提示为0x801901F6的错误代码. 在加载Windows更新网页时,出现初始化错误,代码为0x801901F6 问题描述: 在加载Windows更新网页时,收到“没有可用更新”错误信息,在Windows更新日志文件中的错误代码为error 0x801901F6 。 处理办法: 这个错误表示你用的是网景代理服务器版(Netscape Proxy...
  2. 如何改变IE浏览器的首页,以及首页设置变成灰色锁定,标题栏修复 问:     请问如何修改IE浏览器的首页设置?新装的系统,还不太会设置. 答: 常规方法     打开IE浏览器,如果你的是IE7,请先按一下Alt键,就会出现菜单栏,然后点”工具”菜单,然后点”Internet 属性”.将首页的文字输入框里的内容设置为您需要设置的地址,比如www.x2009.net 如果以上方法无效,请尝试以下方法. 注册表的修改方法...
  3. 将IE默认自动补充完成网址的com.cn后缀改为com     在使用IE的过程中,我们经常需要输入网址,其实为了更快捷的输入,IE已经内置了一个功能,只要你输入域名中间的,然后按Ctrl+Enter就可以了。然后IE会自动地添加“http://www”前缀和“.com”后缀。大多数浏览器,包括早期版本的IE在内,都提供了这个特点。     但在IE7和IE6里,按这个快捷键,出现的却是“http://www”前缀和“.com.cn”,但是我们访问.COM结尾概率比.com.cn结尾的要多得多,所以有时候想修改一下它,让它变回以前的“http://www”前缀和“.com”, 虽然有修改系统文件的方法来实现,但是太过于烦琐,而且操作系统文件也是有危险的,经过多方查找,才发现原来只需要通过注册表就可以搞定这个小问题了     首先在任务栏上点开始菜单,点运行,输入regedit按回车打开注册表编辑器,然后在左边依次展开到HKEY_CURRENT_USER\Software\ Microsoft\Internet Explorer\Toolbar,并在里面创建一个名字为QuickComplete的注册表子键。 然后,在QuickComplete子键里,你需要创建一个名字为QuickComplete的字符串值,内容为http://www.%s.com即可(如果要回到.com.cn结尾,请输入http://www.%s.com.cn即可)...
  4. IE7,IE8在浏览器上设置百度搜索的方法 当你装上IE7,IE8,你会发现浏览器自带了一个搜索框,可是这里默认是没有百度的,怎么添加呢?说起来最快的方法,就是把以下内容复制到记事本里,保存为"搜索.reg"然后双击它按照提示导入注册表,一切就搞定了,当你重新打开浏览器,是不是就能看到了呢!赶快行动吧! Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\SearchScopes] "DefaultScope"="{CDB051F2-166F-408A-B5AD-852FBEB67EB5}" "Version"=dword:00000001...
  5. 在百度贴吧发言时插入图片以及网址的方法 问: 如何在百度贴吧发言时插入一张图片或者一段视频 答: 贴图片: 第一步: 将鼠标移动到图片上,点击鼠标右键,选择“属性”。 第二步: 这时会出现一个对话框,在对话框“地址(URL)”一项旁边,有一段很长的地址。将这段地址“复制”下来。 第三步: 然后将刚刚“复制”的这段(URL)地址“粘贴”在百度贴吧发言区的“图片链接”一项当中,再填好贴子标题和内容,最后点击“发表贴子”。贴图成功!...