2012年11月17日星期六

如何制作和妙用适合自己的上网代理 PAC 文件(以GoAgent为例)

.pac(Proxy Auto-Config)文件是一个使用代理时的规则文件,它是由JavaScript编写而成,主要是告诉系统什么条件下使用代理链接互联网,什么时候不用,从而免去了使用者频繁的切换,让电脑使用者更方便地使用代理服务。

.pac文件是由Netscape在1996年设计,文件里主要是一个功能函数 FindProxyForURL(url,host),文法(syntax)是:

function FindProxyForURL(url, host)
 {
    return RetStr;
 }

url和host是参数,功能函数根据这两个参数进行分析,然后根据结果将使用代理与否的决定传回,RetStr就是决定,通常当决定不用代理时,RetStr会是"DIRECT"(即直接联网的意思)。以下一段程式片段加进了两个情况的分析句子:


 function FindProxyForURL(url, host)
 {
    //如果是谷歌,使用代理
    if (shExpMatch(url, "*://*.google.com/*") || shExpMatch(url, "*://google.com/*"))
    {
      return "PROXY 127.0.0.1:8087"
    }

   //如果是百度,不用使用代理
   if (shExpMatch(url, "*://*.baidu.com/*") || shExpMatch(url, "*://baidu.com/*"))
    {
      return "DIRECT";
    }

   return "PROXY 127.0.0.1:8087; DIRECT";
 }


'PROXY 127.0.0.1:8087' 这句的意思是使用本机(localhost)的8087端口进行代理链接(即使用代理)。这句是针对GoAgent的(因为我正在使用这个代理),其他代理,可能有其它的要求。

return "PROXY 127.0.0.1:8087; DIRECT"是当上面两个条件都不符合时的返回值,意思是"使用代理;如果代理无效则直接连接"。

以上片段的两个 if .. 分析主要是针对网址,其他的如:isPlainHostName() dnsDomainIs() localHostOrDomainIs() isResolvable() isInNet() dnsResolve() myIpAddress() dnsDomainLevels() shExpMatch() weekdayRange() dateRange() timeRange() 都可以按自己的需要加以使用,详情请参阅有关网站。

在两句的if分析句子中(第一句为例),if (shExpMatch(url, "*://*.google.com/*") || shExpMatch(url, "*://google.com/*")),其意思是:如url与"*://*.google.com/*"吻合或(||,也即or)url与"*://google.com/*"吻合则使用代理。语句中的"*"是 wild card,代表任何表述的意思,也即"*://*.google.com/*"="任何表述(包括http/https)://任何表述(www/第一/第二 ...域名).google.com/任何表述(在谷歌下的任何网页/文件)"

以上片段的目的是想让读者基本上明白代理和.pac文件是怎么一齐工作,在这里我们不打算讨论太多的编程,我们会集中在怎么把这个文件用到最好。

一旦有了.pac文件,我们可以为浏览器做上几两的减肥(也即把autoproxy/Proxy Switchy卸掉)。下载的GoAgent已经附有一个.pac文件(目前叫proxy.pac),如果需要,完全可以不用它,自己量身定做一个。

.pac文件的内容是可以添加或删减,如果你发现一个网站突然被墙了,可以按照上面的方法添加上去,如发现某个网站已经解封了,也可以把它去掉,避免.pac文件变得臃肿。

我个人是主张全局代理的,至少从安全角度看,是应该这样想的。

一般设置全局代理都会这样设置(因为不需要规则,因此也就省去.pac文件的使用)


但是这种设置有个问题,就是当需要切换到VPN时就必须进来一次,把钩去掉,我是最怕麻烦的人。解决办法就是把钩去掉,使用一个自造的.pac文件,从此,就不用进进出出了。

这个.pac文件很简单,就是用上面曾提及的一句指令: return "PROXY 127.0.0.1:8087; DIRECT",再以GoAgent为例(你可以保留它原本的.pac文件然后自创一个),以下是步骤:

1) 进入GoAgent的local目录打开proxy.ini,进行修改:


2)新建一个.pac文件,就叫它做global.pac吧,输入以下几行然后保存:

               function FindProxyForURL(url, host)
               {  
                 return "PROXY 127.0.0.1:8087; DIRECT";
                }

3)记住你.pac文件的完整路径;例如在e:program files\goagent\里,便写成:file://e:/program files/goagent/global.pac

4)进入系统的internet设置,把完整路径填入即可:

知道了.pac文件的原理,无论你懂不懂编程,按照以上的方法,都能使它活起来。

祝大家畅游互联网!


p.s.:最后要感谢一下 @Ryans233, 他使我对.pac 文件由更深入的认识

没有评论:

发表评论