代理自动配置文件PAC的使用方法

代理⾃动配置⽂件PAC的使⽤⽅法
注意:
1、微软从Internet Explorer(IE)11版本开始,已经弃⽤本地PAC⽂件的⽅式(也就是我们说的“file://”⽅式)配置⾃动代理了,只能通过http或者https⽅式加载代理⾃动配置的PAC⽂件
3、⼿动配置中的例外允许的⼤⼩为2068个字符,为查到此限制的⽂档,2068为实际验证的值,如下:
我通常上⽹使⽤两个浏览器,safari⽤于⼀般上⽹;Chrome安装SwitchyOmega插件,在不同的代理中切换,来保证某些⽹站的上⽹速度。
但是这种⽅式到了⼿机上就有点懵,⼏乎所有的iPhone浏览器都不⽀持代理的⾃动切换和设置,所以只能选⼀个相对兼容性⽐较好的⽹络⽅式⼀直⽤下去。很不爽利。。。
后来发现代理⾃动配置⽂件PAC是个好东西,跟SwitchyOmega类似,能够⽐较智能的切换所需,所以给⼤家推荐⼀下。
通常设备上⽹的设置,都有3个选项,1是直接连接,不使⽤代理;2是⾃⾏设置http代理;3是使⽤代理⾃动配置⽂件URL。
这个URL指向的就需要是⼀个PAC⽂件。如果在电脑上,可以是file:///这种形式指向本地的⽂件。如果是⼿机上,则只能放到⼀个可以http访问的服务器上。
PAC⽂件本质是js的⼀个⼦集,其中必须实现⼀个函数:
function FindProxyForURL(url, host)
两个参数,url是将要访问的⽹络地址,host是从url中分离出来的主机名。
每次浏览器访问任何⼀个⽹址的时候,都会调⽤这个脚本,根据脚本的返回值,选择浏览器使⽤哪个代理来访问互联⽹。FindProxyForURL函数返回的访问⽅式,可以⽀持三种:
DIRECT
直接访问,不适⽤任何代理
PROXY host:port
设置http代理,host是代理主机,port是代理端⼝
SOCKS host:port
使⽤SOCKS代理模式,后⾯是主机及端⼝号
这三种⽅式,前两种是所有浏览器都⽀持的。第三种SOCKS,有的浏览器会解释为SOCKS5,有的浏览器会解释为SOCKS4,还有的浏览器还另外提供了SOCKS5⽅式。在mac Safari浏览器上及iPhone中是将SOCKS解释为SOCKS5协议。
对于PAC所使⽤的js语⾔的语法,不同浏览器的⽀持也不⼀样。IE⽀持完整的js语法,甚⾄alert命令弹出窗⼝都⽀持。Safari则严格遵循PAC的规范,仅⽀持简单局部变量的赋值和if语句及return语句。
工笔花鸟论文所以通常安全起见,如果你的PAC⽂件会⽤在很多场合,最好考虑兼容性然后再编写。
PAC所⽀持的函数并⾮通常浏览器中的函数,详细内容可以参考这个。
具体PAC脚本的编写⽅法我们参考完成的脚本来解释:
function FindProxyForURL(url, host)
{
url  = LowerCase();
host = LowerCase();
if (shExpMatch(url,"*twitter*")  ||
shExpMatch(url,"*facebook*") ||
shExpMatch(url,"*fb*") ||
shExpMatch(url,"*messenger*")) {
return "PROXY 192.168.1.1:8080; DIRECT";
};
if (shExpMatch(url,"*youtube*") ||
大嘴泉>智能气功
shExpMatch(url,"*google*")){
return "PROXY 192.168.1.2:8080; DIRECT";
};
if (shExpMatch(url,"*wikipedia*") ||药品分类>粽子
shExpMatch(url,"*blogspot*") ||
){
return "PROXY 192.168.1.3:8080; DIRECT";
}
return "DIRECT";
}
shExpMatch是PAC专⽤的函数之⼀,判断url中是否包含某个⽹址,"*"是通配符的意思,表⽰url两端
可以有任意字符,只要中间部位匹配成功即可。3组条件各⾃返回⼀个代理,都不能匹配,使⽤DIRECT直连。
PROXY 192.168.1.1:8080; DIRECT是⽤分号隔开的两个代理模式,如果前⾯的代理协议本浏览器不⽀持的话,使⽤后⾯的协议。
所以类似SOCKS的协议,可以写成:
SOCKS5 192.168.1.1:8081; SOCKS 192.168.1.1:8082; DIRECT
这表⽰如果浏览器⽀持SOCKS5命令,则使⽤第⼀个协议;如果不⽀持SOCKS5命令,使⽤第⼆个SOCKS协议,实际在iPhone这就代表SOCKS5;前⾯两个都不⽀持,则DIRECT。
数控切割机系统PAC中⽀持的函数有好⼏个,另外两个可能常⽤到的是:isInNet和dnsResolve,来看⼀个例⼦:
if (isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0") ||
isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0"))){
return "DIRECT"
}
刚才说过了,host是⾃url中分离出来的主机⽹址,⾸先使⽤dns解析为IP地址,然后判断是否属于给定的⽹段。如果是,则返回直连,表⽰这个⽹段不通过代理来访问。
上⾯举例的PAC完整⽂件的例⼦,是我使⽤的PAC⽂件,其中使⽤了相反的逻辑。是某⼏个⽹站则使⽤相应代理,否则全部直连。所以没有使⽤isInNet和dnsResolve函数。但很多⼈习惯的时候还是会⽤到。

本文发布于:2024-09-23 10:20:04,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/164601.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:代理   浏览器   配置
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议