- 浏览: 516809 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
PAC脚本的编写
adapt from internet;
一个PAC文件其实就是一个文本文件,最简单的格式就是包含一个叫FindProxyForURL的JScript函数,IE通过传入两个变量来调用这个函数,一个是用户浏览的地址URL全路经,一个是这个URL中的主机名部分(host)。
这个FindProxyForURL函数有三种可能的字符串返回值,一是"DIRECT",就是直接连接,不通过代理;二是"PROXY proxyaddr:port",其中proxyaddr和port分别是代理的地址和代理的端口;三是"SOCKS socksaddr:port",其中socksaddr和port分别是socks代理的地址和端口,一个自动代理文件可以是多个选择的组合,其中用分号(;)隔开,如:
function FindProxyForURL(url,host) { if (host == "www.mydomain.com") return "DIRECT"; return "PROXY myproxy:80; PROXY myotherproxy:8080; DIRECT"; }
下面是代理脚本可能用到的函数和说明(英文不好的朋友可以直接跳过去看应用):
PAC Helper Functions
dnsDomainIs(host, domain)
Returns true if the host is part of the specified domain, false otherwise.
isInNet(hostname, Resolves the hostname and subnet IP, subnet mask)
returns true if the hostname is within the subnet
specified by the IP address and the subnet mask, false otherwise.
isPlainHostName(host)
Returns true if there are no dots in the hostname, false otherwise.
isResolvable(host)
Internet Explorer tries to resolve the hostname through DNS and returns true if successful, false otherwise.
localHostOrDomainIs Returns true if the host matches (host, domain)
the host portion of the domain, or if the host matches the host and domain portions of the domain, false otherwise. (Executed only for URLs in the local domain.)
dnsDomainLevels(host)
Returns the number of dots in the hostname.
dnsResolve(host)
Returns a string containing the IP address of the specified host.
myIPAddress( )
Returns a string containing the local machine's IP address.
shExpMatch(url, shexp)
Returns true if the supplied URL matches the specified shell expression, false otherwise.
dateRange(parmList)
Returns true if the current date falls within the dates specified in parmList, false otherwise.
timeRange(parmList)
Returns true if the current time falls within the times specified in parmList, false otherwise.
weekdayRange(parmList)
Returns true if today is within the days of the week specified in parmList, false otherwise.
下面是各个函数应用的例子:
a、
isPlainHostName(host),本例演示判断是否为本地主机,如 http://myservername/
的方式访问,如果是直接连接,否则使用代理
function FindProxyForURL(url, host) { if (isPlainHostName(host)) return "DIRECT"; else return "PROXY proxy:80"; }
b、 dnsDomainIs(host, "")、localHostOrDomainIs(host, ""),本例演示判断访问主机是否属于某个域和某个域名,如果属于.company.com域的主机名,而域名不是company.com和home.company.com的直接连接,否则使用代理访问。
function FindProxyForURL(url, host) { if ((isPlainHostName(host) ││ dnsDomainIs(host, ".company.com")) && !localHostOrDomainIs(host, "www.company.com") && !localHostOrDomainIs(host, "home.company.com")) return "DIRECT"; else return "PROXY proxy:80"; }
c、 isResolvable(host),本例演示主机名能否被dns服务器解析,如果能直接访问,否则就通过代理访问。
function FindProxyForURL(url, host) { if (isResolvable(host)) return "DIRECT"; else return "PROXY proxy:80"; }
d、 isInNet(host, "", ""),本例演示访问IP是否在某个子网内,如果是就直接访问,否则就通过代理,例子演示访问清华IP段的主页不用代理。
function FindProxyForURL(url, host) { if (isInNet(host, "166.111.0.0", "255.255.0.0")) return "DIRECT"; else return "PROXY proxy:80"; }
e、 shExpMatch(host, ""),本例演示根据主机域名来改变连接类型,本地主机、*.edu 、*.com分别用不同的连接方式。
function FindProxyForURL(url, host) { if (isPlainHostName(host)) return "DIRECT"; else if (shExpMatch(host, "*.com")) return "PROXY comproxy:80"; else if (shExpMatch(host, "*.edu")) return "PROXY eduproxy:80"; else return "PROXY proxy:80"; }
f、 url.substring(),本例演示根据不同的协议来选择不同的代理,http、https、ftp、gopher分别使用不同的代理。
function FindProxyForURL(url, host) { if (url.substring(0, 5) == "http:") { return "PROXY proxy:80"; } else if (url.substring(0, 4) == "ftp:") { return "PROXY fproxy:80"; } else if (url.substring(0, 7) == "gopher:") { return "PROXY gproxy"; } else if (url.substring(0, 6) == "https:") { return "PROXY secproxy:8080"; } else { return "DIRECT"; } }
g、 dnsResolve(host),本例演示判断访问主机是否某个IP,如果是就使用代理,否则直接连接。
unction FindProxyForURL(url, host) { if (dnsResolve(host) == "166.111.8.237") { return "PROXY secproxy:8080"; } else { return "PROXY proxy:80"; } }
h、 myIpAddress(),本例演示判断本地IP是否某个IP,如果是就使用代理,否则直接使用连接。
function FindProxyForURL(url, host) { if (myIpAddress() == "166.111.8.238") { return "PROXY proxy:80"; } else { return "DIRECT"; } }
i、 dnsDomainLevels(host),本例演示访问主机的域名级数是几级,就是域名有几个点如果域名中有点,就通过代理访问,否则直接连接。
function FindProxyForURL(url, host) { if (dnsDomainLevels(host) > 0) { // if number of dots in host > 0 return "PROXY proxy:80"; } return "DIRECT"; }
j、 weekdayRange(),本例演示当前日期的范围来改变使用代理,如果是GMT时间周三到周六,使用代理连接,否则直接连接。
function FindProxyForURL(url, host) { if(weekdayRange("WED", "SAT", "GMT")) return "PROXY proxy:80"; else return "DIRECT"; }
k、 最后一个例子是演示随机使用代理,这样可以好好利用代理服务器。
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; } }
利用上面的函数和例子说明,大家就可以写出比较复杂有效的自动代理脚本。
当然大家是否觉得很头痛,不要紧,胖大海已经写好了proxy.pac文件,大家可以到这里下载下来放在本机,或者直接直接网络访问。
如果放在本机的话,比方说你放在E盘跟目录下,那么地址请写成file://e:/proxy.pac
这个PROXY文件是根据05年12月cernet公布的免费IP以及深圳大学自己界定的某些免费域名编写的。
主要用到了isInNet与shExpMatch两个函数,各位朋友可以根据自己的需要去更改。
发表评论
文章已被作者锁定,不允许评论。
-
dwr 框架
2016-09-20 09:59 369首先,你安装DWR时会配置一个servlet,这个servl ... -
onchange, oninput, onpropertychange 的用法和区别
2016-01-29 17:33 1301onchange, oninput, onproper ... -
javascript eval(),JSON
2014-09-15 10:33 619eval函数的工作原理 eval函数会评 ... -
window.open , window.opener 的用法
2011-08-03 11:44 1959window.open() 支持环境: JavaScript1 ... -
JavaScript 跨域 问题
2011-01-28 15:40 1226在客户端编程语言中,如javascript 和Actio ... -
javascript 技巧(一)
2010-12-15 15:07 1094一. open 居中 function newW ... -
javascript 模糊输入及多选 ,模糊查询,select等
2010-12-02 10:45 2283一个SELECT可以多选的,支持模糊查询的,支持分页的一 ... -
AJAXRPC 让 javascript 直接调用服务端方法
2010-10-12 12:17 1651AJAXPRC是快速、简单的J ... -
JavaScript 多文件上传
2010-10-08 15:05 1091多文件上传时,首先要解决的一个问题就是动态去添加或删除文 ... -
js 页面中 坐标,位置
2010-10-08 15:00 1516<html> <head> ... -
javascript trim() 写法
2010-08-04 13:07 1009javascript ,js 除去右边空格 , trim ... -
json定义,与解析
2010-07-19 12:21 1181JSON( JavaScript Object Notati ... -
javascript 面向对象
2010-07-09 12:22 612//javascript 面向对象 转自: http ... -
javascript 正则表达式
2010-07-07 17:53 657转 http://www.iteye.com/topic/4 ... -
javascript 图片 查看
2010-07-07 17:49 631转 http://www.iteye.com/t ... -
javascript 各种验证
2010-07-07 17:43 896//验证是否为空 function check_blank( ... -
showModalDialog IE 与 firefox
2010-07-05 10:07 20081.------------------------- ... -
window.setInterval 和window.setTimeout的区别
2010-06-13 13:00 925<!-- setTimeout(表达式,延时时间) ...
相关推荐
这个脚本可能包含了对JavaScript语法的理解,能够将输入的域名列表转化为`FindProxyForURL`函数的逻辑。通过这种方式,可以方便地管理和更新需要通过代理访问的站点列表,而无需手动编辑PAC文件。 **proxy_domains....
它通过一个JavaScript脚本定义了如何根据请求的URL来选择合适的代理服务器。本文档详细介绍了PAC文件的编写方法、保存方式以及返回值的格式。 #### 二、PAC文件结构 PAC文件的核心是一个名为 `FindProxyForURL` 的...
在本套"pac学习源代码视频教程"中,你将有机会深入探索Python编程以及与之相关的爬虫技术和Selenium自动化测试工具的运用。这是一份针对已有编程基础的学习者精心设计的实战教程,旨在帮助你提升技能并将其应用于...
3. WinHttpGetProxyForUrl:根据URL获取合适的代理服务器信息,可以处理自动检测(PAC)脚本和代理服务器列表。 4. WinHttpConnect:连接到指定的HTTP服务器,需要提供主机名、端口号等信息。 5. WinHttpSetOption...
Python在haas506平台上的支持表明,该设备支持运行Python脚本,这是一种高级且易读的编程语言,非常适合物联网设备的开发,因为它的语法简洁,库丰富,能够快速实现各种功能。通过将Python应用程序与固件打包在一起...
3. **C语言编程**:C语言的基本语法、结构、函数和指针,这些都是编写嵌入式程序的基础。 4. **GPIO 控制**:通过编程控制GPIO引脚,以实现LED灯的亮灭,模拟幽灵灯的效果。 5. **PWM(脉宽调制)**:用于调节LED...
`文档解析_pac_rag`可能是一个程序包或脚本的名称,它专注于解析特定格式的文档,并可能包含解析器的源代码、配置文件以及使用示例。为了进一步了解这个工具,你需要解压文件并查看其内容,包括源代码、readme文件或...
这个游戏灵感来源于经典的“吃豆人”(Pac-Man),玩家控制一个小角色在迷宫中移动,吃掉豆子并避开幽灵。这个源码提供了深入理解Java编程、游戏逻辑构建以及图形用户界面设计的机会。 首先,我们要了解Java编程...
吃豆豆游戏,又称为Pac-Man,是一款经典的街机游戏,自1980年发布以来在全球范围内广受欢迎。这款游戏的基本目标是控制一个黄色的圆形角色“吃豆人”在迷宫中吃掉所有的豆子,同时避开四处游荡的幽灵。如果你成功吃...
Python以其简洁明了的语法和丰富的库支持,成为了AI开发的首选语言。在Gama中,Python被用来编写和训练神经网络模型,这些模型可以处理游戏画面输入,预测游戏状态,并做出相应的动作决策。例如,在Breakout中,AI...
JavaScript是一种广泛应用于Web开发的脚本语言,它可以创建交互式的网页内容,包括游戏。在这个压缩包中,"osgameclones-master"很可能包含了多个使用JavaScript实现的流行游戏克隆源代码。 这些克隆项目可能包括但...
4. **代码转换**:将ES6+新特性转换为广泛支持的ES5语法,确保兼容性。 5. **懒加载和按需加载**:只在需要时加载部分代码,降低首屏加载时间。 6. **源码映射**:生成.map文件,方便在开发过程中进行调试。 7. **...
为了更好地理解`scoopman`,开发者需要熟悉C++的基础语法和面向对象编程概念,同时还需要学习SCOOP的并行编程模型。这包括了解如何定义任务、声明领域、使用异步通信以及调试并发程序。通过分析`scoopman-master`中...
GDScript是Godot游戏引擎所支持的一种高级脚本语言,它易于学习,语法简洁,且具备了面向对象编程的特性。以下是一些基于GDScript实现吃豆人游戏的关键知识点: 1. **游戏循环**:所有游戏都基于游戏循环运行,包括...