【问题标题】:Java Servlet as a HTTP ProxyJava Servlet 作为 HTTP 代理
【发布时间】:2012-08-22 12:27:47
【问题描述】:

我已经阅读了数百篇 SO 帖子并研究了几个可用的 Java HTTP 代理源......但我找不到我的问题的解决方案。

我编写了一个代理 Http-Requests 的 WebApp。 WebApp 正在运行,但链接和引荐来源网址已损坏,因为代理页面的“根”指向我的服务器的根目录,而不是我的 proxyservlet 的路径..

为了更清楚:

  1. 我的 ProxyServlet 收到请求“http://myserver.com/proxy/ProxyServlet?foo=bar

  2. ProxyServlet 现在从 ServerX 获取页面内容(例如“http://original.com/test.html”)

  3. 只需从一个流向另一个流读写并复制标题,即可将页面内容传递给浏览器。

  4. 浏览器显示的页面,即浏览器显示的 URL 是原始请求(“http://myserver.com/proxy/ProxyServlet?foo=bar”),但所有相关链接现在都指向 “http://myserver.com/XXX.html”而不是“http://myserver.com/proxy/ProxyServlet/XXX.html

是否有一个响应标头,我可以在其中更改“路径”,以便相关链接正确指向我的 ProxyServlet?

(重写页面内容和替换链接太难了,因为页面包含相对寻址的元素,例如javascript代码和其他活动内容......)

(将我的 Servlet 的映射更改为“/*”也是不可能的...必须通过此路径访问...)

【问题讨论】:

  • 我自己不知道标头,但我的第一步是使用“curl”之类的工具来查看您的 servlet 返回的标头。所以...curl -i myserver.com/proxy/ProxyServlet?foo=bar,如果您可以访问 Unix 机器。
  • 您需要在该命令中将协议放在 mysever 前面。 cmets 会自动将开始 http... 的内容转换为链接并删除 http!
  • 除了我的 Servlet 之外,我不能使用 curl 或其他任何东西......我不管理服务器,也不能设置“真正的”代理,也不能设置套接字或或或......我有通过 Servlet 代理页面...

标签: java servlets proxy http-headers


【解决方案1】:

您正在发明“反向代理”,却错过了“URL 重写”功能... 在我的搜索结果的顶部,这是一个开源代理 servlet,它执行此操作: http://j2ep.sourceforge.net/docs/rewrite.html

此外,如果您必须这样做,您应该知道系统架构可能有问题。始终可以选择使用 Apache、nginex、Varnish 等独立代理,因为您必须在开始扩展时添加一个(或更多!)。

【讨论】:

    【解决方案2】:

    听起来您正在代理的页面正在使用绝对链接,例如<a href="/XXX.html"> 表示“无论在哪里找到此链接,都要相对于文档根目录查找它”。如果你可以控制它,最好的办法是让代理目标在它的链接中更加宽松,而是使用<a href="XXX.html">。如果你不能这样做,那么你需要使用 JSoup 重写这些 URL,一些示例代码:

    Document doc = Jsoup.parse(rawBody, getDisplayUrl());
    
    for(Element cssALink : doc.select("link[rel=stylesheet],a[href]"))
    {
        cssALink.attr("href", cssALink.absUrl("href"));
    }
    for(Element imgJsLink : doc.select("script[src],img[src]"))
    {
        imgJsLink.attr("src", imgJsLink.absUrl("src"));
    }
    return doc.toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2010-11-11
      • 2015-03-24
      • 2012-11-22
      相关资源
      最近更新 更多