POST调用另一台服务器

HI,

我们可以从一台服务器到另一台Web服务器进行POST调用。 例如,在server1中部署了一个Web应用程序。 当我们调用server2中部署的Web应用程序时,我们可以使用POST方法类型调用。 或者它总是可以是具有显式URL的GET方法

两种方式:

  1. 如果您当前的请求已经是POST,则只需发送307重定向。

    response.setStatus(307); response.setHeader("Location", "http://other.com"); 

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

  2. 自己玩代理。

     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,客户认为他仍然在您的网站上。

也可以看看:

  • 如何使用URLConnection来触发和处理HTTP请求?

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

 String encoding = request.getCharacterEncoding(); if (encoding == null) { encoding = "UTF-8"; request.setCharacterEncoding(encoding); } StringBuilder query = new StringBuilder(); for (Entry 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); 

是的,您可以使用HTTPURLConnection

这是一个例子

 try { // Construct data String data = URLEncoder.encode("key1", "UTF-8") + "=" + URLEncoder.encode("value1", "UTF-8"); data += "&" + URLEncoder.encode("key2", "UTF-8") + "=" + URLEncoder.encode("value2", "UTF-8"); // Send data URL url = new URL("http://hostname:80/cgi"); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); wr.flush(); // Get the response BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = rd.readLine()) != null) { // Process line... } wr.close(); rd.close(); } catch (Exception e) { //log it ,sms it, mail it }