http代理服务器原理不复杂,就是将客户端浏览器传过来的http协议头再转发给web服务器,将web服务器返回的数据再转发给客户端浏览器,起了一个中转站的作用。
如下是一个http协议头的例子:
GET http://www.google.com.hk/ HTTP/1.1
Host: www.google.com.hk
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4
Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
协议头后面有个空行。
代理服务器的作用就是将这段数据发送给”Host:“后面指定的地址,这里是"www.google.com.hk"。另外,因为这是浏览器传给代理程序的协议头,所以第三行是:“Proxy-Connection: keep-alive”,如果直接连接web服务器,就要使用“Connection: keep-alive”。
根据以上原理,程序如下:
这段程序基本实现了代理的功能,但只是个雏形,还很不完善,例如从web服务器获取数据传送给浏览器客户端的时候,使用的阻塞串行方法,即从web服务器获取数据和发送数据到客户端同一时刻只能进行一个,最好是当程序给浏览器发送数据的时候,继续从web服务器接收数据。当然,如果代理程序所在主机和web服务器或浏览器客户端任何一方网络连接速度很快,例如和代理客户端在同一局域网内,这种影响不大。
另外,程序不稳定,只代理几个网页程序就会退出,但没有报错。不过打个谷歌之类的网页问题不大。这个程序实用价值不大,只用来研究。