Java HTTP 代理服务器 [关闭]
Posted
技术标签:
【中文标题】Java HTTP 代理服务器 [关闭]【英文标题】:Java HTTP proxy server [closed] 【发布时间】:2013-05-03 07:36:54 【问题描述】:我需要实现一个 HTTP 代理服务器应用程序,它将来自多个客户端的请求代理到远程服务器。
步骤如下:
-
客户端转发请求到代理
代理转发请求到服务器
服务器向代理返回请求
代理向客户端返回请求。
我只是不确定我应该如何实现这个代理。我的第一个想法是实现一个 tomcat 应用程序,它使用 jersey / apache httpclient 将请求转发到远程服务器并将响应返回给客户端?
有没有更好的方法来实现这样的代理服务器?
代理需要处理多个线程。
【问题讨论】:
【参考方案1】:查看LittleProxy——它具有用于传入和传出请求的内置类;您可以像在 servlet 中处理 HTTP 请求一样编写代码。
【讨论】:
是的,它内置了 CONNECT 支持,但实际上并没有内置到 servlet API 中【参考方案2】:您不能将其实现为 servlet,也没有理由使用任何形式的 HTTP 客户端。
无功能的代理服务器是一件非常简单的事情:
-
接受连接并为其启动线程。
从客户端读取请求直到空行。
提取 GET 或 CONNECT 命令或其他任何命令并连接到指定主机。
如果失败,请发回适当的 HTTP 错误响应,关闭套接字,然后忘记它。
否则启动两个线程来复制字节,每个方向一个。没什么特别的,只是
while ((count = in.read(buffer)) > 0)
out.write(buffer, 0, count);
当其中一个套接字读取 EOS 时,关闭另一个套接字以进行输出并退出获取 EOS 的线程。
如果作为 EOS 源的套接字已经关闭输出,请关闭它们。
或者使用 Apache SQUID。
【讨论】:
以上是关于Java HTTP 代理服务器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
JAVA实现的HTTP反向代理 [smiley-http-proxy-servlet]学习