【问题标题】:intercepting http post using httpservletrequest使用 httpservletrequest 拦截 http post
【发布时间】:2018-01-07 19:40:42
【问题描述】:

我打算将 http post 请求重定向到另一台服务器(只是更改 url 和一些标头)并为此使用 Servlet。 在 Servlet 中,我使用 HttpClient 发送请求并获得响应。 问题是:这些操作会将整个发布请求发送到目标吗? :

  1. 将 httpServletRequest 标头复制到 httpClient 请求中

  2. 然后将 httpServletRequest#inputStream 放入请求实体中,如下所示:

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

我的意思是请求 = 标头 + 输入流?如果没有,还应该复制什么?

【问题讨论】:

    标签: java servlets post apache-httpclient-4.x


    【解决方案1】:

    就术语而言,只是在同一页面上:

    1. redirect 是关于将请求发起者发送到另一个 url。这不是你要解释的。
    2. forward 是指在请求发起者不知情的情况下转到另一个内部 url。从发起者的角度来看,响应来自它请求的 url。这不是您的示例代码想要做的事情
    3. 您的代码在其他地方执行请求,作为发起者请求处理的一部分。这就是您的代码似乎通过使用特定框架(如 apache httpclient)所做的事情。但是您正试图通过重用原始请求中的输入流来做到这一点,这是您不应该这样做的。

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

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

    【讨论】:

    • 目前我正在重用输入流,多部分帖子和表单帖子一切正常。但我不确定这种机制是否适用于所有场景
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多