2017-08-01 157 views
0

我要将http post请求重定向到另一个服务器(只是更改url和一些标题)并使用Servlet来达到此目的。 在Servlet中,我使用HttpClient发送请求并获得响应。 问题是:这些操作是否会将整个发布请求发送给目标? :使用httpservletrequest拦截http post

  1. 复制的HttpServletRequest报头插入HttpClient的请求

  2. ,然后把的HttpServletRequest#的inputStream在请求实体是这样的:

    HttpEntity实体=新InputStreamEntity(httpServletRequest.getInputStream(),someContentType);

我的意思是request = headers + input stream?如果不是,还应该复制哪些内容?

回答

0

只要是同一页上有关术语:

  1. 重定向是有关发送请求发起到另一个URL。这不是你正在解释的。
  2. 转发即将转到另一个内部网址,无需请求发件人知道任何东西。从发起者的角度来看,响应来自它所要求的url。这不是您的示例代码试图执行的操作
  3. 您的代码在其他位置执行reuqest作为发起者请求处理的一部分。这就是你的代码似乎是通过使用特定的框架,如Apache httpclient。但是你试图通过重用原始请求中的inputstream来做到这一点,你不应该这样做。

如果您想向请求添加标头,重定向不是选项afaik。 如果你想转发到另一个外部URL,转发不是一个选项。

因此,您需要对其他网站执行新的http请求,作为原始请求处理的一部分。但是您必须处理该原始请求以提取您需要的任何信息(而不是尝试重新使用输入流)。

+0

当前我正在重复使用输入流,并在多部分文章和表单文章中使用everthing。但我不确定这种机制是否适用于所有情况 – redbeard1970