Blog
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.
¿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.
Hola Rafael, actualmente no tengo en el blog una guía para hacer esa función, pero si te puedo recomendar este enlace http://stackoverflow.com/questions/17173435/send-image-file-using-java-http-post-connections de stackoverflow donde se trata de buscar una solucion. Saludos y cualquier otra duda avisame.
Muy buena la Explicación y el código. Saludos.
Hola Carlos, me alegra que te haya servido el tutorial. Cualquier consulta que tengas no dudes en avisar.
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 ( ◠‿◠)
AYUDA !!!
COMO RECUPERAR RUC DE SUNAT
url = new URL(“https://e-consultaruc.sunat.gob.pe/cl-ti-itmrconsruc/jcrS00Alias”);
params.put(“accion”, “consPorRuc”);
params.put(“nuRuc”, “10469415177”);
params.put(“codigo”, “WSTP”);