pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)...
PAC文件格式
PAC文件是純文本格式的,實(shí)際上就是JavaScript文件。Chrome/Chromium的擴(kuò)展Switchy!的"Auto Switch Mode"功能實(shí)際上也是創(chuàng)建和維護(hù)一個(gè)簡(jiǎn)單的PAC文件,但功能比較弱。
對(duì)于一般的應(yīng)用,即使你幾乎不懂JavaScript和編程,也可以通過(guò)本文的介紹實(shí)現(xiàn)基本的功能。
PAC文件FindProxyForURL函數(shù)?
PAC文件中必須包含一個(gè)函數(shù):FindProxyForURL(url, host)。
參數(shù)url是用戶輸入的url,參數(shù)host是url中的主機(jī)名。
比如url為http://www.truevue.org/javascript/pac-proxy-setting,那么host就是www.truevue.org
一個(gè)最簡(jiǎn)單的PAC文件內(nèi)容如下:
?
function FindProxyForURL(url, host) {return "DIRECT"; }?
這個(gè)PAC文件實(shí)際上什么也沒(méi)做,對(duì)任何URL,都將"DIRECT"(直接連網(wǎng))。
PAC文件返回值類型
除了可以return "DIRECT"以外,還有兩種常用方式:
PROXY proxysample.com:8080
http代理的主機(jī)和端口,主機(jī)也可以用IP表示
SOCKS5 socks5sample.com:1080
socks5代理的主機(jī)和端口,主機(jī)也可以用IP表示
那么,我們可以猜測(cè)到,用pac指定一個(gè)http代理應(yīng)該這樣寫
?
function FindProxyForURL(url, host) {return "PROXY 192.168.1.1:3128"; }?
甚至可以指定多個(gè)代理????
?
function FindProxyForURL(url, host) {return "DIRECT; PROXY 192.168.1.1:3128; SOCKS5 lilinux.net:1080"; }?
這句語(yǔ)句的意思是:?
使用不同連接的順序和語(yǔ)句中的順序一致,你可以根據(jù)自己的實(shí)際情況更改。
也許你明確知道哪些網(wǎng)站不能直連,必須用PROXY或者SOCKS5連接,那么可以對(duì)站點(diǎn)分別指定代理配置?
?
function FindProxyForURL(url, host) {if (shExpMatch(url,"*.google.com/*")) {return "PROXY 192.168.1.1:3128";}if (shExpMatch(url, "*.wikipedia.com:*/*")) {return "SOCKS5 lilinux.net:1080";}if (isInNet(host, "10.0.0.0", "255.0.0.0")){return "DIRECT";}return "DIRECT; PROXY 192.168.1.1:3128; SOCKS5 lilinux.net:1080"; }?
這個(gè)PAC文件中引入了兩個(gè)新的函數(shù),但從字面意思上,我們也可以猜出代碼的大概意思:
shExpMatch函數(shù)用來(lái)匹配url或者h(yuǎn)ost,匹配的方式和DOS的通配符相似。例如前面用到的"*.google.com/*"可以匹配任意包含".google.com/"的字符串。?
Chrome/Chromium 的擴(kuò)展Switchy!創(chuàng)建的pac文件還自定義了一個(gè)函數(shù),可以用來(lái)匹配正則表達(dá)式,不過(guò)個(gè)人認(rèn)為在url匹配上通常不需要使用強(qiáng)大的正則表達(dá)式。?
isInNet函數(shù)用來(lái)返回請(qǐng)求的host是否在指定的域內(nèi)。值得注意的是,isInNet的第二個(gè)參數(shù)必須是 IP,不能是主機(jī)名。因此需要把主機(jī)名轉(zhuǎn)換成IP。比如"isInNet(host, dnsResolve(www.google.com), "255.255.255.0")"講到這里,應(yīng)該可以解決你的問(wèn)題了吧。
PAC文件可以使用的JavaScript函數(shù)
當(dāng)然PAC也不止這么簡(jiǎn)單,它還提供了不少其它函數(shù),在本文就不詳細(xì)講述了。http://www.truevue.org/javascript/pac-functions?中列出了PAC代理文件中可以使用的JavaScript函數(shù)。
你也許想把pac文件發(fā)布到Internet上,這樣其它用戶就只需要在瀏覽器中指定pac文件的url即可。你得配置你的服務(wù)器映射 .pac 文件后綴到MIME類型: application/x-ns-proxy-autoconfig 如果使用的是Netscape服務(wù)器,編輯 config 目錄下的 mime.types 文 件。如果是Apache, CERN or NCSA服務(wù)器,使用 AddType 指令。
轉(zhuǎn)載于:https://www.cnblogs.com/tongbiao/p/6806547.html
總結(jié)
以上是生活随笔為你收集整理的pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python模块之re正则表达式
- 下一篇: java信息管理系统总结_java实现科