Java HTTP 代理服务器 [已关闭]

2022-09-03 01:57:16

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

步骤如下:

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

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

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

代理需要处理多个线程。


答案 1

你不能把它实现为一个 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。


答案 2

看看LittleProxy - 它有内置的类,用于传入和传出的请求;您可以编写代码,就像在 servlet 中处理 HTTP 请求一样。


推荐