今天和一个朋友聊到了chrome的自动代理功能,很多人感觉这个功能非常方便,但大家或许不知道这个功能其实是继承自IE浏览器,而且在“遥远”的Windows 98时代IE就已经具有了这个功能。这个功能在IE中被称作Proxy Automatic Configuration简称PAC,这个功能在1996年由Netscape公司开发,随着被IE支持后成为一个业内统一标准。

那么我们在什么情况下需要用到PAC呢?简单的说就是我们需要对一部分网站需要用到特定的代理服务,比如我们公司的内部办公系统就需要用到一个公司的内部代理去访问,而这个代理又不能连接外网,这时候如果我们在访问这些网站时再手动设置代理就会非常麻烦。用PAC就会轻松得多。

如何配置PAC

PAC的配置方法非常简单,不需要安装任何软件或插件,只需用记事本建立一个脚步文件即可,我们可以把这个文件保存在硬盘的任何位置,也可以保存在服务器上,然后打开Internet选项 - 进入 连接 选项卡 - 点击 局域网选项 - 选中 使用自动配置脚本 选项 -  在地址里面填入你的文件位置,比如files://d:/goagent.pac ,即可完成配置。

PAC文件的内容

那么PAC文件中应该写些什么呢?其实这个文件只是一个在配置一个叫做FindProxyForURL(url, host)的JScript函数。比如这个文件的内容可以是:

 function FindProxyForURL(url, host) { return "PROXY DIRECT; PROXY 192.168.0.1:8080; SOCKS 192.168.1.1:1080 "; } 这是一个最简单的PAC脚本,意思就是让对于所有网站都直接进行连接,如果不能连接就尝试使用http代理192.168.0.1进行连接,如果仍然无法连接就尝试SOCKS代理192.168.1.1。

通过上面的示例大家不难看出IE在调用这个函数的时候会传入两个变量来,一个是地址URL全路经,另一个是URL中的主机名部分。而函数在返回的时候可以是三种值,DIRECT代表直接连接,PROXY代表HTTP代理,SOCKS代表SOCKS类型代理。

典型应用

根据URL判断是否需要代理

function FindProxyForURL(url, host) {
   if (shExpMatch(url,"*.facebook.com/*")) {
     return "PROXY 127.0.0.1:8087";
   }
   return "DIRECT";
}

shExpMatch这个函数可能是写PAC脚本中最常用到的了,在本示例中的作用实现对于facebook 域名下的页面调用127.0.0.1:8087这个代理,而其他URL直接访问。

代理不能解析的主机

function FindProxyForURL(url, host)
{
  if (isResolvable(host))
    return "DIRECT";
  else
    return "PROXY 127.0.0.1:8087";
}

这个isResolvable函数实现的功能就是当某个主机域名不能被正常解析的时候就尝试代理访问,比如公司内部如果有独立的DNS而这台DNS又只解析内部地址,就可以利用这个函数自由的切换内外网了,当然也可以用来对付某些ISP的域名劫持。

在家庭和公司之间自动切换

function FindProxyForURL(url, host)
{
if (myIpAddress() == "192.168.0.254") {
return “PROXY 127.0.0.1:80″;
}
else {
return “DIRECT”;
}
}

如果你习惯在下班后将笔记本带回家中的话myIpAddress函数将会十分有用,示例中实现的作用是当本机ip为192.168.0.254的时候就使用127.0.0.1:80这个代理,否则直接连接。

随机选择代理

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

这个示例中用了一个js中常见的随机数选择方法实现了在5个代理服务器中随机选择,这条函数的作者用意大概是平衡服务器使用量,但更重要是的是给我们打开了一个思路,让一些常见的js函数加入到PAC文件中或许能写出一些精彩有趣的函数来。

可用函数

以下列举的是可用于FindProxyForURL()函数体中的条件函数,这些函数的具体用法如果大家感兴趣请查阅互联网,这里就不详细介绍了:

基于主机名的函数:

isPlainHostName()  dnsDomainIs()  localHostOrDomainIs()  isResolvable()  isInNet()

相关的实用程序函数:

dnsResolve()  myIpAddress()  dnsDomainLevels()

基于URL/主机名的条件:

shExpMatch()

基于时间的条件:

weekdayRange()  dateRange()  timeRange()  isPlainHostName(host)

PAC辅助函数功能:
dnsDomainIs(host, domain):

如果主机是指定域的一部分,否则返回false,则返回true。
isInNet(hostname, Resolves the hostname and subnet IP, subnet mask) :

sInNet(主机名,解决了主机和子网的IP地址,子网掩码)返回true,如果是子网内的主机名
指定IP地址和子网掩码,否则返回false。
isPlainHostName(host):

isPlainHostName(主机)返回true,如果没有点中的主机名,否则返回false。
isResolvable(host):

isResolvable(主机)Internet Explorer尝试解析主机名的DNS,如果成功,则返回true,否则返回false。
localHostOrDomainIs:

localHostOrDomainIs返回true,如果主机匹配的主机部分(主机,域)的域,或者如果主机匹配的主机和域的域部分,否则为false。 (仅在本地域中的URL)。
dnsDomainLevels(host):

返回点的数量的主机名。
dnsResolve(host):

dnsResolve(主机)返回一个字符串,其中包含指定的主机的IP地址。
myIPAddress( ):

myIPAddress()返回一个字符串,其中包含了本地计算机的IP地址。
shExpMatch(url, shexp):

所提供的URL,如果符合指定的shell表达,shExpMatch(URL,shexp)返回true,否则返回false。
dateRange(parmList):

如果当前日期在指定日期parmList,则返回true,否则返回false。
timeRange(parmList):

如果当前时间在parmList指定的时间范围内,返回true,否则返回false。
weekdayRange(parmList):

如果今天是在日的一周中指定的parmList,则返回true,,否则返回false。

玩转IE之自动切换代理服务器相关推荐

  1. [实用插件]SwitchyOmega,自动切换代理服务器

    Chrome最新版如何安装Proxy SwitchyOmega 由于Chrome的代理设置与windows10的1703及以后的版本不兼容,导致无法使用代理功能,给工作带来了很大的不便.最近发现一款不 ...

  2. Hystrix的应用案例:多短信供应商的自动切换与恢复

    本文转载自公众号:永辉云创技术 该号由我参与维护,欢迎大家关注支持!!! 案例背景 目前的互联网应用几乎都会使用外部供应商的短信接口来实现一些验证.确认或是推广营销的行为.其中,对于验证.确认类的操作 ...

  3. 笔记本电脑拔掉电源自动切换性能模式

    [任务计划程序]实现自动切换性能模式 我的笔记本电脑是小米air13.3指纹版,插上电源的时候性能还可以,勉强能满足我日常开发需求,但是一旦拔掉电源,电脑就会因为供电不足而导致CPU频率降到1GHz以 ...

  4. 刷下拉框diyiming好_决斗学院全新版本辅助一次性800号自动切换刷神器

    首先,我声明,这个教程是建立在你已经看过了我写的两篇文章"决斗之城电脑挂机明细教程"和"决斗之城红手指云手机挂机教程"的基础之上. 如果你还没有看过,一些基本的 ...

  5. 学生用计算机玩游戏怎么按OK键,玩电脑游戏是怎么切换桌面

    玩游戏时如何使计算机切换到台式机? 专家帮助_ 您正在玩什么游戏? 可以切换某些游戏,不能切换某些游戏,您可以直接按Ctrl和Alt中间的键来教授开始菜单! 如果不是特殊游戏,那应该没问题! 当计算机 ...

  6. Android默认电话卡,Android智能终端SIM卡自动切换方法与流程

    本发明涉及智能终端的技术领域,尤其涉及一种SIM卡的切换方法. 背景技术: 现在的手机等机器基本支持多卡配置,而且现在单卡配置基本已经不能满足人们的日常需求:并且在智能系统的潮流之下,有人喜欢用手机看 ...

  7. ubuntu16.04自动切换桌面壁纸

    一.描述 让办公电脑桌面自动更换壁纸是一个很常见的需求,虽然不少这方面的小软件可以实现这个功能.事实上,在基于Gnome的桌面系统中,我们可以不需要借助任何第三方软件的帮助来让我们的桌面自动更换壁纸. ...

  8. 自动切换IE代理设置: 简单使用IE自动配置脚本

    今天和一个朋友聊到了chrome的自动代理功能,很多人感觉这个功能非常方便,但大家或许不知道这个功能其实是继承自IE浏览器,而且在"遥远"的Windows 98时代IE就已经具有了 ...

  9. ie打开自动切换到ie5了_您会切换到IE8吗?

    ie打开自动切换到ie5了 Pretty much every web developer I know uses Firefox as their browser of choice (apart ...

  10. nginx+keepalive主从双机热备+自动切换解决方案

    环境采集cenots 6.3 64位迷你安装,因为安装前,你需要做一些工作 yum install -y make wget 如果你愿意可以更新下系统,更换下yum源. 1.安装keepalive 官 ...

最新文章

  1. Python源码学习:多线程实现机制
  2. 高手快帮忙,关于replace和正者表达式的问题
  3. LSMW批处理使用方法(12)_步骤16、17
  4. 音频处理六:(音频的反FFT)
  5. Serekh塞拉赫资源包背后的创作过程
  6. 对vuex的一点理解
  7. 步进电机控制芯片_STK682/步进电机_STK682-010-E控制芯片 原创中文翻译
  8. 利用VB函数Dir()实现递归搜索目录
  9. 天翼网关安装php,AC双频光猫拆机:天翼网关2.0-HS8145v和移动智能光猫HS8546v
  10. 深入理解java虚拟机
  11. 伦敦艺术大学创意计算机学院,伦敦艺术大学专业详细设置
  12. 基于FPGA的数字时钟
  13. 申请高德地图开发key
  14. 数据挖掘之七种常用的方法
  15. 云等保安全合规解决方案
  16. c语言泰勒公式求ln,ln(1-x)的泰勒级数展开是什么?
  17. excel 外部链接 乱码_在Excel文件中查找外部链接
  18. python生成报表并打印_使用expect+python拉取数据并生成报表
  19. glue logic-胶合逻辑
  20. [error] Vivado代码仿真时错误提示:ERROR: [Common 17-39] ‘launch_simulation‘ failed due to earlier errors.

热门文章

  1. 六、DDE服务器函数
  2. 语音信号特征处理--Fbank\MFCC
  3. XML 大于号 小于号 处理
  4. 十年老撕鸡分享,五分钟搭建个人轻论坛
  5. 车载软件FrameWork集成字体(鸿蒙字体)
  6. linux执行历史命令用哪个键,Linux中如何使用history命令即历史命令
  7. 【光线追踪系列五】漫反射(Diffuse)
  8. IP Camera 基础知识
  9. 职场思想分享009 | 一个人对待工作的态度决定其成绩的多少?
  10. php工作态度,工作质量,取决于工作态度