自动配置IE代理脚本
生活随笔
收集整理的這篇文章主要介紹了
自动配置IE代理脚本
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用本本上網時,往返家里和單位,因為單位是用的代理上網,家里是直接連接.因此每次都要修改IE的代理設置,雖然是個小事,但是每次都要修改總是有點煩,于是參考GOOGLE,寫了一個自動配置代理的腳本.這樣無論在家和在公司,只要連上局域網就可以上網了.
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的實例,順便學習下它的語法
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;
?????}????
}
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腳本的控制:?
- 用戶隨機選擇使用多臺代理服務器中的任意一臺來達到流量負載均衡的目的;
- 管理員通過PAC腳本控制用戶使用和不使用某臺代理服務器,這樣可以空出時間對代理服務器進行維護;
- 讓服務器工作在主備模式,當主服務器宕機時,會自動切換到其它備用服務器而不會中斷服務;
- 根據訪問目的地的不同,自動選擇最佳代理服務器。
下面列舉幾個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;
?????}????
}
轉載于:https://www.cnblogs.com/ttyp/archive/2005/11/18/279124.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的自动配置IE代理脚本的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Some best freeware
- 下一篇: 常见标点符号的用法