成功最有效的方法就是向有经验的人学习!

PAC语法整理

在公司遇到翻墙的需求,于是乎建立起代理服务器,本地使用的脚本自动配置代理,很多年没搞过桌面方面的东西了,有点手生了,今天我把有关PAC脚本的语法整理一下。

function FindProxyForURL(url, host) {
    // our local URLs from the domains below example.com don't need a proxy:
    if (shExpMatch(host, "*.example.com"))
    {
        return "DIRECT";
    }

    // URLs within this network are accessed through
    // port 8080 on fastproxy.example.com:
    if (isInNet(host, "10.0.0.0", "255.255.248.0"))
    {
        return "PROXY fastproxy.example.com:8080";
    }

    // All other requests go through port 8080 of proxy.example.com.
    // should that fail to respond, go directly to the WWW:
    return "PROXY proxy.example.com:8080; DIRECT";
}

主体
PAC脚本主体是一个FindProxyForURL的JS函数。函数的反回值有三类:

function FindProxyForURL(url,host)
{
  if(host=="http://www.domain.com/") return "DIRECT";
  return "PROXY myproxy:80;PROXY myotherproxy:8080;DIRECT";

}

函数

isPlainHostName(host)

判断是否是本地主机


dnsDomainIs(host,domain) localHostOrDomainIs(host,”“)

判断访问主机是否属于某个域和某个域名
示例:

function FindProxyForURL(url, host)
{
    if ((isPlainHostName(host) ||
    dnsDomainIs(host, ".company.com")) &&
    !localHostOrDomainIs(host, "http://www.company.com/") &&
    !localHostOrDomainIs(host, "home.company.com"))

        return "DIRECT";
    else
        return "PROXY proxy:80";
}

isResolvable(host)

主机名是否能被dns服务器解析

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

isInNet(host,”“,”“)

访问IP是否在某个子网内

function FindProxyForURL(url, host)
{
    if (isInNet(host, "166.111.0.0", "255.255.0.0"))
        return "DIRECT";
    else
        return "PROXY proxy:80";
}

shExpMatch(host,”“)

主机名判断

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

url.substring(0,n)

截取协议字符串

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

dnsResolve(host)

域名ip解析

unction FindProxyForURL(url, host)
{
if (dnsResolve(host) == "166.111.8.237") {
return "PROXY secproxy:8080";
}
else {
return "PROXY proxy:80";
}
}

myIpAddress

本地IP

function FindProxyForURL(url, host)
{
if (myIpAddress() == "166.111.8.238") {
    return "PROXY proxy:80";
}
else {
    return "DIRECT";
}
}

dnsDomainLevels(host)

几级域名

function FindProxyForURL(url, host)
{
    if (dnsDomainLevels(host) > 0) { // if number of dots in host > 0
        return "PROXY proxy:80";
    }
        return "DIRECT";
}

weekdayRange

星期几

function FindProxyForURL(url, host)
{
    if(weekdayRange("WED", "SAT", "GMT"))
        return "PROXY proxy:80";
    else
        return "DIRECT";
}

Math数学函数
通用js函数

Math.floor(Math.random()*5)

其它
iis设置mime
“扩展名”填 .pac
“MIME类型”填 .txt 或者 .h

赞(0) 打赏
未经允许不得转载:陈桂林博客 » PAC语法整理
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册