Java

Realizar una petición POST en Java

En este tutorial aprenderemos a realizar una petición POST en Java, esto nos puede ser de gran utilidad para hacer que nuestra aplicación se pueda comunicar con un web service.
Realizar una petición POST puede ser un poco más complicado que realizar una petición GET, debido a que los parámetros en una petición POST no se pueden pasar por la URL.

¿Cómo realizar una petición POST en Java?

Para realizar esta tarea vamos a crear una función estática llamada send, la cual va a ser la encargada de enviar la petición utilizando los objetos URL y HttpURLConnection como se muestra en el siguiente ejemplo:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.LinkedHashMap;
import java.util.Map;

public class Main {

	public static void send() throws IOException {
		URL url = new URL("http://localhost/post.php");
		Map<String, Object> params = new LinkedHashMap<>();

		params.put("parametro", "ProgramaciónExtrema.com");

		StringBuilder postData = new StringBuilder();
		for (Map.Entry<String, Object> param : params.entrySet()) {
			if (postData.length() != 0)
				postData.append('&');
			postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
			postData.append('=');
			postData.append(URLEncoder.encode(String.valueOf(param.getValue()),
					"UTF-8"));
		}
		byte[] postDataBytes = postData.toString().getBytes("UTF-8");

		HttpURLConnection conn = (HttpURLConnection) url.openConnection();
		conn.setRequestMethod("POST");
		conn.setRequestProperty("Content-Type",
				"application/x-www-form-urlencoded");
		conn.setRequestProperty("Content-Length",
				String.valueOf(postDataBytes.length));
		conn.setDoOutput(true);
		conn.getOutputStream().write(postDataBytes);

		Reader in = new BufferedReader(new InputStreamReader(
				conn.getInputStream(), "UTF-8"));
		for (int c = in.read(); c != -1; c = in.read())
			System.out.print((char) c);
	}

	public static void main(String[] args) {
		try {
			send();
		} catch (IOException e) {
			System.out.println(e.getMessage());
		}
	}

}

En el ejemplo anterior la petición POST se dirige a un archivo llamado post.php con el siguiente contenido.

<?php
  echo 'El valor del parámetro es ' . $_POST['parametro'];
?>

Al ejecutar el ejemplo el resultado sería “El valor del parámetro es ProgramaciónExtrema.com”.

Bueno gente, hemos llegado al final de este tutorial, espero que les sea de gran utilidad y ante cualquier problema no duden en dejar un comentario.

Compartilo en
Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestEmail this to someone

AboutJosé Di Meglio

Apasionado de la tecnología y programación. Aportando información gratuita sobre el mundo de la informática.

5 comments

  1. ¿Y si quisiera subir por post una imagen? Estoy en un proyecto donde necesito subirlos desde una aplicación de escritorio. Pero buscando por internet no he podido encontrar con algún ejemplo que lo haga así. De echo ni siquiera con get.

    Espero puedas darme una guía. Gracias.

  2. Buenas noches/madrugadas 😀

    Llevo semanas a falta de solucionar el dichoso problema de comunicación JSON a POST.
    para terminar mi aplicación BETA, aprendí a programar de cero hace unos meses y solo me falta esto (-’_’-) y unos cuantos if/else/for con la respuesta xD

    De tu código me falla esta parte
    //De hecho si la pongo así en comentario, la aplicación no falla
    /*Reader in = new BufferedReader (new InputStreamReader (
    conn.getInputStream(), “UTF-8”));
    for (int c = in.read(); c != -1; c = in.read())
    System.out.print((char) c);*/

    No he cambiado nada de tu código para ver si iba pero, por si fuera diferente mi dirección post no termina en .php (Solo puedo usarlo mediante POSTMAN, me lo programó un informático) tengo un String ya preparado y, si la respuesta fuera igual tengo ya un “planing” de como usarlo. Pero si te descuidas se puede hacer luego más fácil ¯\_(ツ)_/¯

    cualquier cosa consúltame, saludos y muchas gracias por adelantado ( ◠‿◠)

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *