落伍了!居然才知道这个好东西:GAppProxy

作者:TualatriX 来源:http://imtx.cn/archives/1121.html

从Google Reader的共享里看到的,忘了是哪位朋友的,先说声感谢!大家虽然都很低调,但是相互之前还是传播了一些有用的信息,其中就包括这个GAppProxy。

GAppProxy,地址:http://code.google.com/p/gappproxy/。具体啥用途,大家可以上去看,看完以后,记得保持低调,在评论中也请小心。请将此告诉你信任的朋友!

我下载来用了一下,不愧是通过Google的服务器,速度就是快。

之前我用自己的SSH作代理,也还行了,但是延迟有200多MS,Google的这个,延迟只有60MS。

想到自己还有近七个Appspot的空间还没有用,于是……我打算根据这个,作一个图形化的Proxy软件,就像著名的-F-R-E-E-G-A-T-E一样。

Google AppSpot每个App有20GB/天的进出带宽,5个的话,就有100GB了,称之为一个超级Proxy一点也不过分。

用Pygtk写一个图形工具,运行后,在预设的服务器中选一个,然后自动设置Firefox的代理,最后回到通知区域待命。哈哈,这不就是-F-R-E-E-G-A-T-E吗?

附:改造GAppProxy让它不处理本地请求

自从前天发现GAppProxy后,还没怎么去琢磨它。今天大致研究了下它是怎么实现的,然后改造了一下,让它不代理本地的请求。

我主要看了本地端,服务端和本地端可能差不多,是个反转的过程。而且本地端的代码还比服务端多呢。

本地端使用了SocketServer.ThreadingMixIn和BaseHTTPServer.HTTPServer来进行多线程的请求,也就是说,你同时打开几个网页,它都能一起处理。

具体地处理代码在LocalProxyHandler这个类中,把do_GET、do_HEAD和do_POST都定位于统一的do_METHOD,进行http处理。

原理也不是很复杂,主要是把request解析,再重编码(主要是加上压缩特性?)后,发往fetchServer,从fetchServer取得请求数据,然后再写回response中。这应该也是一般代理服务器的运行过程吧。

然后,把下面的代码加到#do path check后面,让它跳过有关向本地内容的请求:

if netloc.startswith('127.0.0.1') or
netloc
.startswith('localhost'):
self.wfile.write(urllib2.urlopen(self.path).read())
return

这样弄好后,就可以一直开着Proxy了。在运行本地Web的同时,也可以畅通无阻的上网了。

没有评论: