PAC文件格式

PAC文件是纯文本格式的,实际上就是JavaScript文件。Chrome/Chromium的扩展Switchy!的"Auto Switch Mode"功能实际上也是创建和维护一个简单的PAC文件,但功能比较弱。

对于一般的应用,即使你几乎不懂JavaScript和编程,也可以通过本文的介绍实现基本的功能。

PAC文件FindProxyForURL函数 

PAC文件中必须包含一个函数:FindProxyForURL(url, host)。

参数url是用户输入的url,参数host是url中的主机名。

比如url为http://www.truevue.org/javascript/pac-proxy-setting,那么host就是www.truevue.org

一个最简单的PAC文件内容如下:

function FindProxyForURL(url, host) {
return "DIRECT";
}

这个PAC文件实际上什么也没做,对任何URL,都将"DIRECT"(直接连网)。

PAC文件返回值类型

除了可以return "DIRECT"以外,还有两种常用方式:

PROXY proxysample.com:8080

http代理的主机和端口,主机也可以用IP表示

SOCKS5 socks5sample.com:1080

socks5代理的主机和端口,主机也可以用IP表示

那么,我们可以猜测到,用pac指定一个http代理应该这样写

function FindProxyForURL(url, host) {
return "PROXY 192.168.1.1:3128";
}

甚至可以指定多个代理    

function FindProxyForURL(url, host) {
return "DIRECT; PROXY 192.168.1.1:3128; SOCKS5 lilinux.net:1080";
}

这句语句的意思是:

  1. 对所有URL,都直接连接;
  2. 如果不能直接连接,那么就使用192.168.1.1:3128这个http代理连接;
  3. 如果还是不能连接,则使用lilinux.net:1080这个socks5代理连接。

使用不同连接的顺序和语句中的顺序一致,你可以根据自己的实际情况更改。

也许你明确知道哪些网站不能直连,必须用PROXY或者SOCKS5连接,那么可以对站点分别指定代理配置

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";
}

这个PAC文件中引入了两个新的函数,但从字面意思上,我们也可以猜出代码的大概意思:

  1. 当url是*.google.com/* 时,自动使用PROXY代理;
  2. 当url是*.wikipedia.cm/*时,自动使用SOCKS5代理;
  3. 当host是10.0.0.0 /255.0.0.0的子网内时,自动直连;
  4. 如果都不匹配,则依次按DIRECT、PROXY、SOCKS5的次序尝试。

shExpMatch函数用来匹配url或者host,匹配的方式和DOS的通配符相似。例如前面用到的"*.google.com/*"可以匹配任意包含".google.com/"的字符串。

Chrome/Chromium 的扩展Switchy!创建的pac文件还自定义了一个函数,可以用来匹配正则表达式,不过个人认为在url匹配上通常不需要使用强大的正则表达式。

isInNet函数用来返回请求的host是否在指定的域内。值得注意的是,isInNet的第二个参数必须是 IP,不能是主机名。因此需要把主机名转换成IP。比如"isInNet(host, dnsResolve(www.google.com), "255.255.255.0")"讲到这里,应该可以解决你的问题了吧。

PAC文件可以使用的JavaScript函数

当然PAC也不止这么简单,它还提供了不少其它函数,在本文就不详细讲述了。http://www.truevue.org/javascript/pac-functions 中列出了PAC代理文件中可以使用的JavaScript函数。

你也许想把pac文件发布到Internet上,这样其它用户就只需要在浏览器中指定pac文件的url即可。你得配置你的服务器映射 .pac 文件后缀到MIME类型: application/x-ns-proxy-autoconfig 如果使用的是Netscape服务器,编辑 config 目录下的 mime.types 文 件。如果是Apache, CERN or NCSA服务器,使用 AddType 指令。

PAC自动代理文件格式,教你如何写PAC文件的更多相关文章

  1. PAC 自动代理

    最近看了 HTTP权威指南 里面有关于  代理的介绍,代理有很多种,今天主要来说说 自动代理PAC PAC(Proxy Auto Config) 是一个 Script:经由编写这个 Script,我们 ...

  2. 浅析PAC,教你动手修改你的PAC文件及user-rule文件实现自动代理

    Shadowsocks作为现在一种很流行的穿墙工具,以其轻量级.速度感人等优点深受广大网友热捧.与VP_N相比,他就像一把锋利的”瑞士军刀”,不用受制于“系统全局代理”模式的困扰,控制更加便捷,基于S ...

  3. 浅析PAC,修改PAC文件及user-rule文件实现自动代理

    浅析PAC,修改PAC文件及user-rule文件实现自动代理 代理自动配置(英语:Proxy auto-config,简称PAC)是一种网页浏览器技术,用于定义浏览器该如何自动选择适当的代理服务器来 ...

  4. Spring -- aop(面向切面编程),前置&后置&环绕&抛异常通知,引入通知,自动代理

    1.概要 aop:面向方面编程.不改变源代码,还为类增加新的功能.(代理) 切面:实现的交叉功能. 通知:切面的实际实现(通知要做什么,怎么做). 连接点:应用程序执行过程期间,可以插入切面的地点. ...

  5. 使用BeanNameAutoProxyCreator实现spring的自动代理

    提到代理,我们可以使用ProxyBeanFactory,并配置proxyInterfaces,target和interceptorNames实现,但如果需要代理的bean很多,无疑会对spring配置 ...

  6. Spring AOP使用整理:自动代理以及AOP命令空间

    三.自动代理的实现 1.使用BeanNameAutoProxyCreator 通过Bean的name属性自动生成代理Bean. <bean class="org.springframe ...

  7. spring8——AOP之Bean的自动代理生成器

    对于上篇博客http://www.cnblogs.com/cdf-opensource-007/p/6464237.html结尾处提到的两个问题,可以使用spring提供的自动代理生成器解决.自动代理 ...

  8. SSM-Spring-15:Spring中名称自动代理生成器BeanNameAutoProxyCreator

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 名称自动代理生成器:BeanNameAutoProxyCreator 为了更好的测试,我放了俩个接口,俩个实现 ...

  9. SSM-Spring-14:Spring中默认自动代理DefaultAdvisorAutoProxyCreator

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 默认自动代理DefaultAdvisorAutoProxyCreator 本处没有什么要讲的,放原代码 ISo ...

随机推荐

  1. LuManager 2.0.97 设置shopex 手机版waptouch,绑定二级目录

    1.步骤,先要把主站的 限制目录访问那个勾选,去掉 2.创建新网站,不需要ftp,直接设置网站目录“/home/主站目录/waptouch” 3.保存

  2. [solr] - SolrJ增删查

    使用SolrJ进行对Solr的增.删.查功能. 参考引用: http://wiki.apache.org/solr/Solrj Eclipse中新建一个项目:TestSolr 其中SorlJ的Lib包 ...

  3. 理解JavaScript中的事件轮询

    原文:http://www.ruanyifeng.com/blog/2014/10/event-loop.html 为什么JavaScript是单线程 JavaScript语言的一大特点就是单线程,也 ...

  4. mac与php环境

    一.目录 apache目录:/etc/apache2/ mysql目录:/usr/local/mysql/ 站点目录:/Library/WebServer/Documents/ 二.mac系统给文件夹 ...

  5. itextSharp 附pdf文件解析

    一.PdfObject: pdf对象 ,有9种,对象是按照对象内涵来分的,如果按照对象的使用规则来说,对象又分为间接对象和直接对象.间接对象是PDF中最常用的对象,如前面对象集合里面的,所有对象都是间 ...

  6. PHP的命名空间

    简介: 防止名称冲突. 原理: 类似文件目录/usr/local这样的. 用法: namespace:定义命名空间: use:取别名: 代码示例:file 1.php <?php namespa ...

  7. SVG 使用

    SVG即Scalable Vector Graphics可缩放矢量图形,使用XML格式定义图形, 主要优势在于可缩放的同时不会影响图片的质量. SVG 在html 中常用的方法 1.使用<img ...

  8. Linux_09------Linux上系统扫描和安全策略

    先谢慕课网/** * linux系统扫描技术 * * 主机扫描.路由扫描.批量服务扫描.系统安全策略(防SYN和ddos攻击) */ /** * 主机扫描 * ping fping hping * * ...

  9. localstorage,sessionstorage使用

    今天看了一下HTML5,也算是简单的学习一下吧,HTML5 提供了两种在客户端存储数据的新方法:localstorage,sessionstorage. localStorage - 没有时间限制的数 ...

  10. 信息安全系统设计基础课程实践:简单TUI游戏设计

    简单TUI游戏设计                目       录               一                      Curses库简介与基本开发方法             ...