首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >作为HTTP代理

作为HTTP代理
EN

Stack Overflow用户
提问于 2012-08-22 12:27:47
回答 2查看 11.7K关注 0票数 5

我阅读了数百篇这样的文章,并研究了几个可用的Java代理资源.但我找不到解决问题的办法。

我编写了一个代理Http-请求的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的映射更改为"/*“也是不可能的.它必须通过这条路径访问.)

EN

回答 2

Stack Overflow用户

发布于 2012-08-28 22:34:33

您正在发明一个“反向代理”,而忽略了"URL重写“功能.在我搜索结果的顶部,下面是一个开源代理servlet,它可以这样做:http://j2ep.sourceforge.net/docs/rewrite.html

此外,如果您必须这样做,您应该知道系统架构可能有问题。加入一个独立的代理,如Apache、nginex、Varnish应该始终是一种选择,因为您必须添加一个(或多个!)当你开始缩放的时候。

票数 5
EN

Stack Overflow用户

发布于 2013-11-04 22:17:56

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

代码语言:javascript
代码运行次数:0
运行
复制
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();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12073147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档