首页 > 技术 > 用google.cn做proxy访问Google的服务

用google.cn做proxy访问Google的服务

最近玩Google App Engine,发现随着闹运会的结束,这个东西也重新不可访问了。今天偶然在SMTH的Python版上看到的。非常实用的一个方法,原始作者不可考,于是整理一下写在这里。

简单的说,Google的所有服务都是可以通过一个相同的服务器访问到,Google根据请求的URL当中的域名来决定应该定向到哪个服务。www.google.cn一样可以访问到所有的服务,例如App Engine。但是因为DNS服务器的原因,appengine.google.com会被定向到Google美国的服务器,不会去连接www.google.cn。但是事实上,如果我们能够向www.google.cn发送一个HTTP请求,其中的URL是指向appengine.google.com的,服务器一样能够帮我们中转请求,并把结果会传给我们。

要达到这个目的有两个方法,一个是修改hosts,让appengine.google.com和*.appspot.com指向到www.google.cn的IP地址。这个有两个劣势,一个是www.google.cn其实有很多个地址做负载均衡,一旦加上了hosts条目,就失去了负载均衡的好处;另一个劣势是hosts文件不支持*.appspot.com这种语法,所以只能把自己知道的appspot上的应用统统添加。

另一个方法则相对好一点,就是把www.google.cn:80设置成访问appengine.google.com的代理服务器。这种方法很好用,但是需要写PAC文件(Proxy Auto-Config,代理服务器自动配置文件)。所幸这个文件语法相当简单,因此可以直接写下面一段:

function FindProxyForURL(url, host) {
    if (shExpMatch(host,"*.appspot.com")) {
        return "PROXY www.google.cn:80";
    }
    if (shExpMatch(host,"appengine.google.com")) {
        return "PROXY www.google.cn:80";
    }
    return "DIRECT";
}

然后保存成一个proxy.pac文件。在浏览器的配置当中,把“自动浏览器配置脚本”的配置项指到这里即可。

标签: ,
  1. 卡修 本
    2008年9月17日00:00 | #1

    什么时候不用翻墙就好了。。。虽然墙的存在大大提高了我国网民的电脑水平,呵呵

  1. 本文目前尚无任何 trackbacks 和 pingbacks.