开发一个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代理服务器的主要内容,如果未能解决你的问题,请参考以下文章

开发板通过主机http代理服务器上网方法

apache反向代理:如何转发代理服务器的HTTP_HOST

如何用 Nginx 配置透明 HTTP 和 HTTPS 代理

如何用 Nginx 配置透明 HTTP 和 HTTPS 代理

JMeter脚本开发

HTTP协议5之代理--转