Proxy Auto Config文件格式说明

PAC文件实际上是一个Script, 通过PAC我们可以让系统根据情况判断使用哪一个Proxy来访问目标网址, 这样做的好处:

  1. 分散Proxy的流量,避免Proxy Server负载过高
  2. 针对个别条件设定, 加快浏览速度
  3. 设定请求顺序, 自动依次尝试多个Proxy途径

PAC文件是纯文本, 格式和JavaScript一样, 不能包含任何HTML标签, 一定要定义的是Function FindProxyForURL

function FindProxyForURL(url, host) {
...
}

一个完整的例子

var domains = {
"google.com": 1,
"facebook.com": 1,
"bing.com":1
}; var proxy = "SOCKS5 127.0.0.1:1080; SOCKS 127.0.0.1:1080; DIRECT;"; var direct = 'DIRECT;'; function FindProxyForURL(url, host) {
var lastPos;
do {
if (domains.hasOwnProperty(host)) {
return proxy;
}
lastPos = host.indexOf('.') + 1;
host = host.slice(lastPos);
} while (lastPos >= 1);
return direct;
}

另一个例子

function FindProxyForURL(url, host)
{
url = url.toLowerCase();
host = host.toLowerCase(); if (isInNet(dnsResolve(host), "10.0.0.0", "255.0.0.0")
|| isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0")
|| isInNet(dnsResolve(host), "192.168.0.0", "255.255.0.0")
|| isInNet(dnsResolve(host), "127.0.0.0", "255.255.255.0")
) {
return "DIRECT";
} if (shExpMatch(url,"*twitter*")
|| shExpMatch(url,"*google*")
|| shExpMatch(url,"*facebook*")
|| shExpMatch(url,"*blogspot*")
|| shExpMatch(url,"*youtube*")
|| shExpMatch(url,"*gstatic*")
|| shExpMatch(url,"*ytimg*")
|| shExpMatch(url,"*ggpht*")
|| shExpMatch(url,"*github*")
) {
return "SOCKS 192.168.1.1:3128";
}
return 'DIRECT';
}

如果使用了PAC, 则浏览器在接受我们要求的网址后会去执行ret = FindProxyForURL(url, host). 其中,
url是所要求网址的完整路径,
host是对方的计算机名称(就是在://和/之中的部份).
return值ret是Proxy的组态. 它的格式有下列三种:

  • DIRECT: 直接联机而不透过Proxy
  • PROXY host:port 使用指定的Proxy
  • SOCKS host:port 使用指定的Socks代理

比如说当浏览器得到的是Proxy aa.bb.cc:3128; Proxy bb.cc.dd:3128; DIRECT 的话,那浏览器会先尝试aa.bb.cc:3128, 如果无法使用, 再尝试bb.cc.dd:3128, 还是不行的话, 就直接联机.

PAC中的预设函数

在PAC中,除了可以使用一般JavaScript的Function外, 它还定义了一些预设的函数

isPlainHostName(host)
host 由网址取得的主机名称.
此 Function 会判断 host 是否为不包含网域 (Domain). 如果不包含则 return true, 如果包含则 return false.

dnsDomainIs(host,  domain)
host 由网址取得的主机名称.
domain 指定的网域.
此 Function 会判断 host 是否属于网域 domain. 如果是则 return true, 否则return false.

localHostOrDomainIs(host,  hostdom)
host 由网址取得的主机名称.
hostdom 完整的网域名称.
此 Function 会判断 host 是否为 hostdom,或 host 是否为 hostdom 的主机名称. 如果是则 return true, 否则 return false.

isResolvable(host)
host 由网址取得的主机名称.
此 Function 会尝试透过 DNS 去解析 host,如果解析成功则 return true, 否则return false.

isInNet(host,  pattern,  mask)
host主机名称,可以是 Domain Name 或 IP. 如果是 Domain Name,则会透过 DNS 查出 IP.
pattern IP.
mask对应于pattern的遮盖.
此 Function 会 host 是否在指定的 IP 范围内,如果是则 return true, 否则 return false.

dnsResolve(host)
host 要透过 DNS 解晰的主机名称.
此 Function 会透过 DNS 去解析 host,return 值即为解析之结果.

myIpAddress()
此 Function 会 return 浏览器所在计算机之 IP 地址.

dnsDomainLevels(host)
host 由网址取得的主机名称.
此 Function 会 return host 的 Domain 层数(点的数目).

shExpMatch(str,  shexp)
str 要进行比对的字符串.
shexp 比对的条件.
此 Function 会比对 str 是否符合 shexp 的表示式(此表示式为 shell expression 而非 regular expressions). 如果是则 return true, 否则 return false.

weekdayRange(), dateRange(), timeRange()
这三个函数的功用都是检查线在时间是否在指定范围内,可以设定分时段使用代理服务

PAC(Proxy Auto Config)代理自动配置文件的编写的更多相关文章

  1. pac (PAC(Proxy Auto Config) 是一个 Script;经由编写这个 Script,我们可以让系统判断在怎么样的情形下,要利用哪一台 Proxy 来进行联机。)

    PAC自动代理文件格式,教你如何写PAC文件 PAC文件格式 PAC文件是纯文本格式的,实际上就是JavaScript文件.Chrome/Chromium的扩展Switchy!的"Auto ...

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

    我通常上网使用两个浏览器,safari用于一般上网:Chrome安装SwitchyOmega插件,在不同的代理中切换,来保证某些网站的上网速度. 但是这种方式到了手机上就有点懵,几乎所有的iPhone ...

  3. PAC 代理自动发现简介

    一 简介 1.1 什么是PAC文件 代理自动配置(PAC)文件包含一组用javaScript编码的规则,允许web浏览器确定是将Web流量直接发送到Internet还是通过代理服务器发送        ...

  4. 企业IT管理员IE11升级指南【15】—— 代理自动配置脚本

    企业IT管理员IE11升级指南 系列: [1]—— Internet Explorer 11增强保护模式 (EPM) 介绍 [2]—— Internet Explorer 11 对Adobe Flas ...

  5. 前端本地proxy跨域代理配置

    等了好久的接口,总算拿到了,结果却发现用本地localhost:9712去请求接口的时候,出现了跨域错误,而这个时候我们就需要进行下跨域配置了. 首先,找到项目中名为webpack.config.js ...

  6. 实现SpringCloud Config 客户端自动刷新

    文章来源:https://blog.csdn.net/qq_27385301/article/details/82716218 一.简介 在使用SpringCloud Config客户端时,如果Con ...

  7. 正向代理 forward proxy、反向代理 reverse proxy、透明代理 transparent proxy nginx反向代理原理和配置讲解 防止外部客户机获取内部内容服务器的重定向 URL 缓存命中

    [大型网站技术实践]初级篇:借助Nginx搭建反向代理服务器 - Edison Chou - 博客园http://www.cnblogs.com/edisonchou/p/4126742.html 图 ...

  8. 代理模式(Proxy)--动态代理(CGLIB)

    上一篇:代理模式(Proxy)--动态代理(jdk) (1)CGLIB技术是第三方代理技术,可以对任何类生成代理,代理的原则是对目标对象进行继承代理 (2)如果目标对象被final修饰,则无法被CGL ...

  9. 代理模式(Proxy)--动态代理(JDK)

    在是上一篇博客中实现了静态代理. 在上篇的结尾提到了一个问题: 思考:如果我们下需要对火车,自行车实现相同的代理,我们又该如何实现呢? 这篇博客就来解决这个问题: 解决这类问题需要用到动态代理技术,实 ...

随机推荐

  1. WEB前端开发成长指南

    小 编注:相比起网页射击狮,操纵代码的前端攻城狮凭着双手在键盘巴拉巴拉敲出的字符,就能赋予二次元的静态页面生命,各种lovely 的~~fabulous的~~elegant的交互效果,那叫一个锦上添花 ...

  2. 【转】如何在IOS中使用3D UI - CALayer的透视投影

    原文网址:http://www.tairan.com/archives/2041/ 例子代码可以在 http://www.tairan.com/thread-3607-1-1.html 下载 iOS的 ...

  3. Android开发中如何调用摄像头的功能

    我们要调用摄像头的拍照功能,显然 第一步必须加入调用摄像头硬件的权限,拍完照后我们要将图片保存在SD卡中,必须加入SD卡读写权限,所以第一步,我们应该在Android清单文件中加入以下代码     & ...

  4. jquery生成二维码

    下载Demo js下载: jquery-1.8.3.js .qrcode.js.jquery.qrcode.js <!DOCTYPE html> <html> <head ...

  5. andeoid学习笔记七

    Android中Broadcast的Intent大全 Api Level 3:(SDK 1.5) android.bluetooth.a2dp.intent.action.SINK_STATE_CHA ...

  6. mysql open files

    错误信息如下: ..... 150905 13:10:17 [ERROR] /usr/local/mysql/bin/mysqld: Can't open file: './mytest/t1.frm ...

  7. 【转】一致性hash算法(consistent hashing)

    consistent hashing 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛: 1  ...

  8. HDU 3584-Cube(三维BIT)

    题意: 给你三维空间两种操作,给出两顶点坐标,把它们确定范围(长方体)内的数全部取反.查询给定点的值.初始全部为零 分析: 有了前面的知识,用BIT实现区间更新单点查询,再用多维实现即可 #inclu ...

  9. codeforces 696C PLEASE 概率dp+公式递推+费马小定理

    题意:有3个杯子,排放一行,刚开始钥匙在中间的杯子,每次操作,将左右两边任意一个杯子进行交换,问n次操作后钥匙在中间杯子的概率 分析:考虑动态规划做法,dp[i]代表i次操作后的,钥匙在中间的概率,由 ...

  10. 【原】Storm分布式RPC

    5. Storm高级篇 序列化 分布式RPC High level overview LinearDRPCTopologyBuilder Local mode DRPC Remote mode DRP ...