【问题标题】:Send Post request in java with response.sendRedirect method使用 response.sendRedirect 方法在 java 中发送 Post 请求
【发布时间】:2014-02-04 11:08:14
【问题描述】:

我想用 java 发送一个 post 请求。 我已经看到了使用 Http Client 发布请求的示例。 但我想使用 sendRedirect 方法。

例如, https://processthis.com/process?name=xyz&phone=9898989898

我想使用发布请求来发送这些参数。因此,任何人都看不到这些参数,同时我需要将我的网址重定向到该网址,

response.sendRedirect("https://processthis.com/process");

【问题讨论】:

    标签: java http-post


    【解决方案1】:

    根据带有 HTTP/1.1 的 RFC2616,您可以发送 307 响应代码,这将使user-agent 向提供的主机重复其 POST 请求。 在你的情况下,做

    response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
    response.setHeader("Location", url);
    

    response 是你的HttpServletResponse 对象。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      当浏览器收到 HTTP 重定向代码时,它总是会按照标准对给定的 url 执行 GET 或 HEAD。这就是为什么必须通过查询字符串发送数据的原因。 如果您想通过 POST 模拟重定向,您可以向您的客户端发送一个包含您想要的信息的表单,并且在页面加载事件中,您使用 Javascript(通常用于在不同服务器之间进行通信,由 SAML 使用)自动提交表单例如协议)。这是一个例子:

      <form name="myRedirectForm" action="https://processthis.com/process" method="post">
          <input name="name" type="hidden" value="xyz" />
          <input name="phone" type="hidden" value="9898989898" />
          <noscript>
              <input type="submit" value="Click here to continue" />
          </noscript>
      </form>
      <script type="text/javascript">
      
          $(document).ready(function() {
              document.myRedirectForm.submit();
          });
      
      </script>
      

      旁注: 如果您的服务器中已经有信息,为什么要发送重定向而不是执行给定的操作? 也许你想实现一个POST/REDIRECT/GET pattern

      【讨论】:

      • 没有。实际上我正在与另一台服务器进行交互。用户提交表单后,我会处理数据,然后我需要将用户重定向到第三方支付页面。当用户提交包含所有必需隐藏字段的表单时,它工作正常(例如我试过)。但是,在我处理完这些参数后,我想从我的网站手动重定向到第三方支付页面(如表单提交)。意味着,参数不应该是可见的,但请求必须去。有什么办法可以实现。这可能很愚蠢。但我更新鲜。请告诉我。
      • 这是创建上述逻辑的原因之一。您将能够在这些服务器之间发布数据,而无需通过查询字符串发送它们。
      • 这种方法的想法是,您发送的信息将只对您的服务器(在您的数据库等中)对用户可见(您通过 HTML 向他发送他的操作信息)和您发布信息的服务器(客户端浏览器将自动发布信息,模拟您的用户手动发布)。你能用我的例子做到这一点吗?
      • 这里是一个开源项目的例子,它做了类似的事情,在 java 中构建 html,它有 javascript 并在响应中返回它。 github.com/keycloak/keycloak/blob/…
      • @Phillip Fleischer:我正在努力实现同样的目标。我的要求是通过java中的POST使用参数重定向到第三方。我该怎么做。即使我在 java 中创建 html 表单,那又如何呢?请帮忙。
      【解决方案3】:

      我认为这是不可能的。为什么不使用 RequestDispatcher。这对你有用。只需在request中设置参数

      request.setAttribute("message", "Hello test");
      RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
      

      OR - HTTP 规范规定所有重定向必须采用 GET(或 HEAD)的形式。如果安全是一个问题,您可以考虑加密您的查询字符串参数。

      或 - 另一个选项,如果您有会话,请在 servlet 中设置会话中的参数。然后在重定向到所需页面后从会话中获取它。

      【讨论】:

      • 您不能使用 RequestDispatcher 转发到外部站点。
      猜你喜欢
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多