开发一个http代理服务器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发一个http代理服务器相关的知识,希望对你有一定的参考价值。
一、产品原型
1、配置使用代理服务器
参照上图设置,HTTPS和FTP等不要设置(本代理服务器未对这两种协议进行处理), IP是 127.0.0.1 表示代理服务器是在本机,监听端口设成8888。
在IE里设置完后,我们会发现其它浏览器也自动开始使用代理服务器了,这是因为设置代理服务器是系统的功能,每个浏览器打开的都是同一个设置代理服务器的程序。
其实,我们可以实现一个自动设置代理服务器的功能,这样,当我们的代理服务器启动的时候,就自动将本机的代理服务器设置成自己,退出的时候,再恢复成原样,这样就不再需要向上面一样手动设置了。
2、使用代理服务器
配置完毕后,在浏览器里输入网址: http://www.baidu.com
我们可以清楚看到,所有的请求和响应信息都已经被监听到了。
二、关键点设计
1、业务流程
参考Fiddler 的设计思想,在程序启动时,new 一个代理(Proxy)类的实例,然后调用这个实例的Start方法,来启动代理服务,
在Start方法里就是不停的异步监听本机的8888端口(还记得刚才设置代理服务器时设置的端口吗),
如果监听到了,就从线程池里,取出来一个线程,并在这个线程里,构造一个Session对象。一个Session对象,代表客户端与服务器的一次会话,在有代理服务器情况下的一次会话(Session)代表的是:
1.从客户端读请求
2.重新包装客户端的请求,转发至目标服务器.
3.从目标服务器读取响应信息
4.包装接收到的响应信息并返回给客户端。
故而在Session类里,封装一个ClientChatter类型的名为Request的对象,用来实现和客户端的通讯,
另外又封装了一个ServiceChatter类型的名为Response的对象,用来实现和目标服务器的通讯。
2、ObtainRequest
3、response.ResendRequest
4、response.ReadRequest
5、returnResponse
以上是关于开发一个http代理服务器的主要内容,如果未能解决你的问题,请参考以下文章
apache反向代理:如何转发代理服务器的HTTP_HOST
如何用 Nginx 配置透明 HTTP 和 HTTPS 代理