domingo, 18 de mayo de 2008

Peticion HTTP/HTTPS GET/POST Java

Esto es una curiosidad muy util, como hacer una petición HTTP por ejemplo para usar los nuevos servicios de Yahoo. Pues aqui teneis el fragmento de código que te resolverá el problema es muy facilito y usando ese maravilloso lenguaje llamado java.

Seguro que muchos de vosotros no habiais hecho esto con java en la vida, pues es increible pero si esta en el paquete java.net...




private static String conexionGET(String request, String protocolo) {

        String responce = "";

        BufferedReader rd = null;

        try {

            URL url = new URL(request);

            if (protocolo.equals("HTTPS")) {

                HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();


                rd = new BufferedReader(new InputStreamReader(conn1.getInputStream()));

            } else {

                URLConnection conn2 = url.openConnection();

                rd = new BufferedReader(new InputStreamReader(conn2.getInputStream()));

            }



            String line;



            while ((line = rd.readLine()) != null) {

                //Process line...

                responce += line;

            }



        } catch (Exception e) {

            System.out.println("Web request failed");

        // Web request failed

        } finally {

            if (rd != null) {

                try {

                    rd.close();

                } catch (IOException ex) {

                    System.out.println("Problema al cerrar el objeto lector");

                }

            }

        }



        return responce;

    }



    private static String conexionPOST(String request, String datos, String protocolo) {

        String responce = "";

        OutputStreamWriter wr = null;

        BufferedReader rd = null;

        try {

            URL url = new URL(request);



            if (protocolo.equals("HTTPS")) {

                HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();


                //Escribir los parametros en el mensaje

                conn.setDoOutput(true);

                wr = new OutputStreamWriter(conn.getOutputStream());

                wr.write(datos);

                wr.flush();



                //Recibir respuesta

                rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            } else {

                URLConnection conn = url.openConnection();

                //Escribir los parametros en el mensaje

                conn.setDoOutput(true);

                wr = new OutputStreamWriter(conn.getOutputStream());

                wr.write(datos);

                wr.flush();



                //Recibir respuesta

                rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));

            }





            String line;



            while ((line = rd.readLine()) != null) {

                //Process line...

                responce += line;

            }



        } catch (Exception e) {

        } finally {

            try {

                if (wr != null) {

                    wr.close();

                }

                if (rd != null) {

                    rd.close();

                }

            } catch (IOException ex) {

                System.out.println("Exception al cerrar el lector o el escritor");

            }

        }

        return responce;

    }

5 comentarios:

Nadie Nada dijo...

Buen ejemplo, pero tengo una duda... si se quiere mandar un post con parametros (cada cual con su nombre) para que en el servidor solo tenga que recibirlo con el codigo (request.getParameter("parametro1");)

gracias!

Jorge Cantón Ferrero dijo...

Hola Nadie Nada,

No entiendo muy bien la pregunta, pero creo que te refieres a como hacer una conexión POST y enviar varios datos. Para ello en el método "conexionPOST" en el String de datos pones cada par "nombre=valor" separados por ";"

No se si es eso a lo que te refieres!

Rodrigo dijo...

Hola que tal necesito hacer esto a un formulario que tengo en un servidor local (appserv: localhost) como hacerlo? funciona asi? saludos!

Jorge Cantón Ferrero dijo...

Hola Rodrigo a en el método GET por ejemplo la url es el string Request por lo que tu le pasarás algo así como
"http://localhost:puerto/servicio?param=value" no sé si así te queda más claro?.

Unknown dijo...

no me devuelve ningun resultado, y he probado con otras formas y me devuelve el siguiente error

Exception in thread "main" javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching lapaginaqueenviopost.com found

he leido que es porque el certificado es invalido pero como puedo solucionar esto?