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

HTTP代理关闭还是自动的呢?

http代理关闭是啥意思

如何设置HTTP代理服务器??

JAVA实现的HTTP反向代理 [smiley-http-proxy-servlet]学习

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

如何开启本机的http代理,并设置端口为8080