来源:http://rndz.org/%E7%BF%BB%E5%A2%99%E5%88%A9%E5%99%A8%EF%BC%8Cproxy-auto-config/

使用 Google 搜索时总是很容易碰触到 GFW 脆弱的神经,解决这个问题的办法是使用代理服务器。对于 Chrome 和 Firefox 来说,有大把的扩展来设置代理服务器,其它浏览器呢?

其实主流的浏览器都支持一种智能的代理设置方式:Proxy Auto Config。pac 是一个 JavaScript 脚本文件,它提供了一个函数FindProxyForUrl,根据浏览器访问的 url 返回不同的代理地址。FindProxyForUrl 可以返回下面三种形式的代理:

  • DIRECT // 不使用代理,直接访问
  • PROXY HOST:PORT // 使用代理,HOST为服务器地址,PORT为代理端口
  • SOCKS HOST:PORT //  使用SOCKS代理,同上

在网上找个代理服务器是简单的,也是很麻烦的。你总能找到大把大把的代理服务器列表,但是并不是全部都是有效的,实际上只有极少部分短期有效。于是有了各种 VPN 实现方案,比如 TOR。TOR 也不是很稳定,总要在使用和不使用代理间切换。

这时就可以让 FindProxyForUrl 返回代理列表,每个代理使用分号隔开。浏览器将依次使用代理服务器尝试访问每个链接,直到成功访问或者代理列表结束。比如 “PROXY 127.0.0.1:8118;DIRECT” 先尝试使用 TOR 访问目标,失败的话再尝试直接访问。

代理列表虽然可以解决服务器失效/不稳定的问题,但每一次尝试都要花费一些时间。为了减少花费的时间,你可以在 PAC 里对 URL 进行分析,对不同的域名、IP、内容返回不同的代理服务器。在 PAC 里除了正常的 JavaScript 函数外,还可以使用 PAC 特有的函数:

  • isPlainHostName(host); // host 为不包含域名的主机名时返回真(没有点号)
  • dnsDomainIs(host,domain); // host 为 domain 子域时返回真
  • localHostOrDomainIs(host,hostdom); // host 和 hostdom 相同或 host 为 hostdom 的主机名时返回真
  • isResolvable(host); // 尝试通过 DNS 解析 host,成功返回真
  • isInNet(host,pattern,mask); // host 的 IP 在指定范围内时返回真(先解析 host 的 IP 地址,再与 mask 做按位与计算,结果与 pattern 比较)
  • dnsResolve(host); // 解析 host,返回 IP 地址
  • myIpAddress(); // 返回本机 IP 地址
  • dnsDomainLevels(host); // 根据 host 包含点号数量返回域名层级
  • shExpMatch(str,shext); // 使用 shell 表达式对 str 和 shext 进行匹配
  • weekdayRange(); // 检查时间是否在指定范围(一周的第几天)
  • dataRange(); // 检查时间是否在指定范围(月、日)
  • timeRange(); // 检查时间是否在指定范围(时间)

除了常规的使用外,FindProxyForUrl 还可以返回一个无效的代理服务器来过滤广告、不安全网址等内容。

—————————————————————————————————————————

需要翻墙利器赛风? 请阅读和关注中国数字时代

推特用户请点击这里免翻墙上推特

请点击这里下载翻墙软件

更多翻墙方法请发电邮(最好用Gmail)到:fanqiang70ma@gmail.com

请阅读和关注中国数字时代翻墙技术博客GFW BLOG(免翻墙)

请使用Google Reader订阅中国数字时代中文版http://chinadigitaltimes.net/chinese/feed),阅读最有价值的中文信息;以及GFW BLOG(功夫网与翻墙)http://feeds2.feedburner.com/chinagfwblog,获取最新翻墙工具和翻墙技巧信息。

要翻墙? 用赛风.
推特用户请点击这里免翻墙上推特
点击这里下载翻墙软件
更多翻墙方法请发电邮(最好用Gmail)到:gongminshehui1@gmail.com
翻墙技术博客GFW BLOG(免翻墙)
阅读中国数字时代(免翻墙)

要翻墙?(发邮件到Gmail):fanqiangyakexi1ATgmail.com