一尘不染

POST呼叫到另一台服务器

jsp

嗨,

我们可以从一台服务器向另一台Web服务器发出POST呼叫吗?例如,在server1中部署了一个Web应用程序。当我们调用部署在server2中的Web应用程序时,是否可以使用POST方法类型进行调用。或始终可以是带有显式URL的GET方法


阅读 261

收藏
2020-06-10

共1个答案

一尘不染

两种方式:

  1. 如果您当前的请求已经是POST,则只需发送307重定向即可。
        response.setStatus(307);
    response.setHeader("Location", "http://other.com");

但是,这将在客户端发出安全确认警告。

  1. 自己代理。
        URLConnection connection = new URL("http://other.com").openConnection();
    connection.setDoOutput(true); // POST
    // Copy headers if necessary.

    InputStream input1 = request.getInputStream();
    OutputStream output1 = connection.getOutputStream();
    // Copy request body from input1 to output1.

    InputStream input2 = connection.getInputStream();
    OutputStream output2 = response.getOutputStream();
    // Copy response body from input2 to output2.

但是,这不会更改URL,客户端会认为他仍在您的网站上。

也可以看看:


更新
:您实际上想从POST重定向到GET,包括所有请求参数。在这种情况下,只需收集POST参数,然后将它们作为查询字符串发送到默认(302)重定向中。

    String encoding = request.getCharacterEncoding();
    if (encoding == null) {
        encoding = "UTF-8";
        request.setCharacterEncoding(encoding);
    }
    StringBuilder query = new StringBuilder();

    for (Entry<String, String[]> entry : request.getParameterMap().entrySet()) {
        for (String value : entry.getValue()) {
            if (query.length() > 0) query.append("&");
            query.append(URLEncoder.encode(entry.getKey(), encoding));
            query.append("=");
            query.append(URLEncoder.encode(value, encoding));
        }
    }

    response.sendRedirect("http://example.com?" + query);
2020-06-10