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. 函数buf_page_get_gen

    /********************************************************************//** This is the general functi ...

  2. 强势解决:windows 不能在本地计算机中起动Tomcat参考特定错误代码1

    Tomcat添加系统服务:service.bat install 启动本服务的时候却提示“windows 不能在本地计算机中起动 Apache Tomcat参考特定错误代码1,若不是Microsoft ...

  3. bzoj3555: [Ctsc2014]企鹅QQ

    将字符串hash.不难写.然而1.注意用longlong2.数组大小注意...3.似乎别人都用的unsigned long long ?. #include<cstdio> #includ ...

  4. UVa 11584 Partitioning by Palindromes【DP】

    题意:给出一个字符串,问最少能够划分成多少个回文串 dp[i]表示以第i个字母结束最少能够划分成的回文串的个数 dp[i]=min(dp[i],dp[j]+1)(如果从第j个字母到第i个字母是回文串) ...

  5. LeetCode Contains Duplicate (判断重复元素)

    题意: 如果所给序列的元素不是唯一的,则返回true,否则false. 思路: 哈希map解决. class Solution { public: bool containsDuplicate(vec ...

  6. Java [Leetcode 303]Range Sum Query - Immutable

    题目描述: Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inc ...

  7. hdu 3496 Watch The Movie

    题意:题目给定N部电影,每部电影有时长和价值,要求看M部电影,并且时间控制在L以内,转化为背包问题,让我们在N件物品中找正好M件物品塞进容量L的包中,求最大的价值.// dp[i][j] 表示在容量为 ...

  8. 【jQuery】总结:筛选器、控制隐藏、操作元素style属性

    筛选器 -> http://blog.csdn.net/lijinwei112/article/details/6938134 常用到的: $("tr[id=ac_"+id+ ...

  9. 【转】.. Android应用内存泄露分析、改善经验总结

    原文网址:http://wetest.qq.com/lab/view/107.html?from=ads_test2_qqtips&sessionUserType=BFT.PARAMS.194 ...

  10. Linux iostat监测IO状态

    Linux iostat监测IO状态 http://www.orczhou.com/index.php/2010/03/iostat-detail/