.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 文件由更深入的认识。