POST вызов на другой сервер - PullRequest
       18

POST вызов на другой сервер

0 голосов
/ 03 февраля 2011

HI,

Можем ли мы сделать POST-вызов с одного сервера на другой веб-сервер.Например, одно веб-приложение развернуто на сервере server1.Когда мы вызываем веб-приложение, развернутое на сервере2, можем ли мы вызывать его, используя тип метода POST.или всегда это может быть метод GET с явными URL

Ответы [ 2 ]

3 голосов
/ 03 февраля 2011

Два способа:

  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, и клиент думает, что он все еще на вашем сайте.

Смотри также:


Обновление : вы действительно хотели перенаправить из 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);
2 голосов
/ 03 февраля 2011

Да, вы можете использовать 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...