2013-05-08 142 views
12

我需要实现一个HTTP代理服务器应用程序,它将代理从多个客户端到远程服务器的请求。Java HTTP代理服务器

步骤如下:

  1. 客户端请求转发到代理
  2. 代理请求转发到服务器
  3. 服务器返回请求代理
  4. 代理返回请求客户端。

我只是不知道我应该如何实现这个代理。我的第一个想法是实现一个使用jersey/apache httpclient将请求转发到远程服务器并将响应返回给客户端的tomcat应用程序?

有没有更好的方法来实现这样的代理服务器?

该代理将需要处理多个线程。

回答

9

你不能实现它作为一个servlet,也没有理由使用任何形式的HTTP客户端。

无特征的代理服务器是一个非常简单的事情:

  1. 接受的连接,并启动一个线程它。
  2. 从客户端读取请求直到空行。
  3. 提取GET或CONNECT命令或任何它并连接到指定的主机。
  4. 如果失败,请发回相应的HTTP错误响应,关闭套接字并忘记它。
  5. 否则启动两个线程拷贝字节,每个方向一个字节。没有什么特别的,只是

    while ((count = in.read(buffer)) > 0) 
    { 
        out.write(buffer, 0, count); 
    } 
    
  6. 当这些插座的一个读取EOS,关闭其他插座输出,并退出了在EOS线程。
  7. 如果作为EOS源的套接字已经关闭输出,请关闭它们两者。

或者使用Apache SQUID。

8

退房LittleProxy - 它有传入和传出请求的内置类;您可以像编写Servlet中的HTTP请求一样编写代码。

+0

是的,它内置了CONNECT支持,实际上并没有内置到servlet API中 – 2013-11-12 15:54:46