我想在Java中发送发布请求。
我已经看到了使用Http Client发布请求的示例。
但是我想使用sendRedirect方法。
例如,
https://processthis.com/process?name=xyz&phone=9898989898
我想使用发布请求发送那些参数。 因此,这些参数对任何人都不可见,同时我需要将我的网址重定向到该网址,例如,
response.sendRedirect("https://processthis.com/process");
根据具有HTTP / 1.1的RFC2616,您可以发送307响应代码,这将使user-agent向提供的主机重复其POST请求。
就你而言
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
response.setHeader("Location", url);
响应是您的HttpServletResponse对象。
希望这可以帮助。
当浏览器收到HTTP重定向代码时,它将始终按照标准执行对给定URL的GET或HEAD。这就是为什么必须通过查询字符串发送数据的原因。
如果要通过POST模拟重定向,则可以将包含所需信息的表单发送给客户端,并且在页面加载事件中,可以使用Javascript(通常用于在不同服务器之间进行通信,由SAML使用)自动提交表单。协议)。这是一个例子:
$(document).ready(function() {
document.myRedirectForm.submit();
});
边注:
如果服务器中已有信息,为什么要发送重定向而不是执行给定的操作?
也许您想实现POST / REDIRECT / GET模式?
否。实际上我正在与其他服务器进行交互。用户提交表单后,我将处理数据,然后需要将用户重定向到第三方付款页面。当用户提交带有所有必填隐藏字段的表单时,它工作正常(我尝试过的示例)。但是,在我处理完这些参数后,我想从我的网站手动重定向到第三方付款页面(例如表单提交)。意思是,参数不应该是可见的,但是必须执行请求。有什么办法可以实现。这可能很愚蠢。但是我更新鲜。请告诉我。
这就是创建上述逻辑的原因之一。您将能够在这些服务器之间发布数据,而无需通过查询字符串发送它们。
这种方法的想法是,您正在发送的信息仅对您的服务器(在数据库中,等等)对用户(您通过HTML向他发送他的信息方式)以及对要发布信息的服务器(对用户而言)可见(客户端浏览器将自动发布信息,模拟您的用户的手动发布)。你能用我的例子实现吗?
这是一个来自开源项目的示例,该示例执行与在Java中构建具有javascript并在响应中返回html的html相似的操作。 github.com/keycloak/keycloak/blob/
@Phillip Fleischer:我正在努力实现同样的目标。我的要求是通过java中的POST通过参数重定向到第三方。我应该怎么做。即使我在Java中创建html表单,那又如何呢?请帮忙。
延迟响应,但是如果您查看链接,java将返回html内容,其中包括执行表单发布的onload javascript。我已经在许多库中看到了这一点,但是它实际上是大多数现代浏览器都支持的带有javascript的简单html生成器。
我认为这是不可能的。为什么不使用RequestDispatcher。这将为您工作。只需在请求中设置参数
request.setAttribute("message","Hello test");
RequestDispatcher dispatcher = servletContext().getRequestDispatcher(url);
或-HTTP规范指出,所有重定向都必须采用GET(或HEAD)的形式。如果安全问题,可以考虑加密查询字符串参数。
或-另一个选项,如果有会话,请在servlet的会话中设置参数。重定向到所需页面后,再从会话中获取它。
您不能使用RequestDispatcher转发到外部站点。