娱乐新地带论坛  

返回   娱乐新地带论坛 > 电脑技术 > 『软件使用』

『软件使用』 交流对软件的使用心得、经验窍门、好的软件要让大家一起用

发表新主题 回复
 
主题工具 显示模式
旧 2010-04-08, 01:03 AM   #1
No1
Tony
坛主
级别:199 | 在线时长:40417小时 | 升级还需:383小时级别:199 | 在线时长:40417小时 | 升级还需:383小时级别:199 | 在线时长:40417小时 | 升级还需:383小时级别:199 | 在线时长:40417小时 | 升级还需:383小时
 
Tony 的头像
 
注册日期: 2003-10-22
帖子: 11,050
积分:6
精华:24
现金:14340金币
资产:29325297金币
Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星
针对不同网页使用不同代理 — ie自动配置脚本

1.前言
2.自动配置脚本简介
3.自动配置脚本语法
4.相关例子
a、isPlainHostName(host)
b、dnsDomainIs(host, "")、localHostOrDomainIs(host, "")
c、isResolvable(host)
d、isInNet(host, "", "")
e、shExpMatch(host, "")
f、url.substring()
g、dnsResolve(host)
h、myIpAddress()
i、dnsDomainLevels(host)
j、weekdayRange()
k、随机使用代理

1.前言
有些朋友会问为什么tw没有自动代理的功能,其实IE本身就有这个功能,只要有一点点JS知识,你可以自己手动编写一个最适合自己的IE代理脚本。

2.自动配置脚本简介


自动配置脚本起的作用就是,当IE访问网页的时候会根据脚本文件里面界定的内容来访问。比方说,你在脚本文件里面限定了访问某些IP使用某个代理的时候,访问另外一些IP使用另外的代理,这就很方便通过脚本文件来完成。

3.自动配置脚本语法
一个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";
}
把以上代码另存为proxy.pac的文件,如:e:\proxy.pac,然后在IE的菜单里"工具"->"INTEL选项"->"连接"->局域网设置

把使用自动配置脚本选上,然后在地址栏填入file://e:/proxy.pac,注意file后是两斜杠,要使设置生效,需要关闭IE再重新打开.

http://image2.360doc.com/DownloadImg/2008/10/16/59711_1773775_2

现在我们介绍下这个proxy.pac脚本文件,脚本的语法是js语法,js的内置函数可以使用,要实现自动配置代理,需要实现FindProxyForURL这个函数,其参数url代表要访问的连接,host代表要访问连接的主机名,该函数有三个返回参数
direct:直接连接
proxy IP:PORT
socket IP:PORT
返回结果大小写不敏感

PAC的其他内置语法见http://wp.netscape.com/eng/mozilla/2...roxy-live.html


PAC脚本另外一个重要的应用是多台代理服务器并存的情况下,通过pac脚本的控制:

用户随机选择使用多台代理服务器中的任意一台来达到流量负载均衡的目的;
管理员通过PAC脚本控制用户使用和不使用某台代理服务器,这样可以空出时间对代理服务器进行维护;
让服务器工作在主备模式,当主服务器宕机时,会自动切换到其它备用服务器而不会中断服务;
根据访问目的地的不同,自动选择最佳代理服务器。


4.相关例子
下面列举几个PAC的实例


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域的主机名,而域名不是
www.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,如果是就使用代理,否则直
接连接。 复制内容到剪贴板 代码:

function 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;
}
}
 
Tony 的签名
古代人有点功夫就研究长生不老,现代人忙完一天只有不想活了!
Tony 当前离线  
回复时引用此帖
旧 2010-04-08, 08:26 AM   #2
No10290
zqsmxk
热心会员
级别:23 | 在线时长:646小时 | 升级还需:26小时级别:23 | 在线时长:646小时 | 升级还需:26小时级别:23 | 在线时长:646小时 | 升级还需:26小时级别:23 | 在线时长:646小时 | 升级还需:26小时级别:23 | 在线时长:646小时 | 升级还需:26小时
 
zqsmxk 的头像
 
注册日期: 2009-03-07
住址: 肇庆
帖子: 1,241
现金:2247金币
资产:2247金币
声望: 10
zqsmxk 正向着好的方向发展
好复杂啊!!!最好当面指导!!!
 
zqsmxk 的签名


知人者智,自知者明;胜人者有力,自胜者强
zqsmxk 当前离线  
回复时引用此帖
旧 2010-04-08, 10:54 AM   #3
No1
Tony
坛主
级别:199 | 在线时长:40417小时 | 升级还需:383小时级别:199 | 在线时长:40417小时 | 升级还需:383小时级别:199 | 在线时长:40417小时 | 升级还需:383小时级别:199 | 在线时长:40417小时 | 升级还需:383小时
 
Tony 的头像
 
注册日期: 2003-10-22
帖子: 11,050
积分:6
精华:24
现金:14340金币
资产:29325297金币
声望: 395
Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星Tony 是一位成功的新星
你有呢个需要?如果不是经常用,偶然指定一下代理,也不麻烦.
Tony 当前离线  
回复时引用此帖
发表新主题 回复

书签


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码

论坛跳转


所有时间均为北京时间。现在的时间是 10:31 PM


©2003-2024 1819.net All rights reserved.