Llegamos al capitulo 4. En este nivel ya somo capaces de crear un servidor en node, escribir un “Hola Mundo” tanto en Node como con el framework Express. Ahora podemos hacer algo diferente, veamos como hacer peticiones http desde nuestra aplicación en node.
Tal vez se pregunte para que necesitamos hacer esto. Sin embargo, hay otros que si pueden saber de que se trata. Este tipo de peticiones puede hacerse para el Web Scraping o Proxy server. Conozcamos un poco sobre estas metodologías antes de comenzar a codificar nuestra aplicación en node.
Web Scraping
Web scraping se utiliza para extraer la información de cualquier pagina web, esto puede hacerlo directamente mediante el protocolo http o bien a través de un navegador. Esta tarea bien podría hacerla un usuario normal, sin embargo esta desarrollado para hacerlo automáticamente por lo que comúnmente llamamos boot o web crawler.
La data extraída por este método es utilizada para realizar estadísticas o algún otro uso en particular. Hoy en día es fuertemente usado por los motores de búsquedas. Por supuesto que con este tipo de metodología, todo tiene su lado positivo y su lado negativo.
Proxy Server
Un servidor proxy no es mas que un intermediario entre computadoras. Se encarga de enrutar la solicitudes de los usuarios por la vía correcta haciendo este trabajo lo mas transparente para el usuario. Puede recibir y enviar peticiones de archivos, acceso a la web, etc, manteniendo la confidencialidad.
Bueno, ya teniendo algo de conocimientos de estas dos metodologías, podemos empezar a desarrollar nuestro código para realizar peticiones http con node.
Modulo request
Para hacer posible esto debemos instalar un modulo llamado “request”. Este modulo te permite hacer cualquier tipo de peticiones HTTP, y en ello se incluye las peticiones GET, PUT, POST y DELETE. Esta habilidad hace el modulo request el mas ideal para interactuar con APIs.
Para instalar este modulo solo tenemos que correr el siguiente comando.
npm install request
Una vez que hemos instalado el modulo tenemos que crear un nuevo archivo “node.js” (puede ser cualquier nombre) con el siguiente código.
var request = require("request"); request("http://www.guiadev.com", function(error, response, body) { console.log(body); });
La primera linea es donde importamos el modulo request. Para hacer una petición http lo hacemos simplemente llamando a la función “request”. En el ejemplo anterior hemos realizado una petición para descargar nuestra web guiadev.com, el segundo parámetro es la función callback.
Esta función callback esta compuesto por tres parámetros:
- Error: Este parámetro devolverá cualquier error que se produzca en la petición.
- Response: El parámetro response es un objeto que contiene gran cantidad de información proveniente del header, el estatus, entre otros.
- Body: Por ultimo tenemos el body, este contiene el cuerpo del response, es decir, el código de la pagina web, en este caso de guiadev.com.
Pero esto no es todo, también puedes combinar con el “file system module” para realizar peticiones http desde y para un archivo. En el siguiente ejemplo volveremos a realizar la petición a nuestra pagina guiadev.com, pero esta vez no la vamos a imprimir por pantalla sino lo vamos a guardar en un archivo llamado “guiadev.html”.
var request = require("request"); var fs = require("fs"); request("http://www.guiadev.com").pipe(fs.createWriteStream("guiadev.html"));
Esta vez hemos importado el modulo de sistema de archivos “fs” como lo mencionamos anteriormente. Logrando así, guardar el contenido en el archivo guiadev.html.
Parametrizando las peticiones
En los ejemplos anteriores hemos hecho unas simples peticiones GET a guiadev. Sin embargo, estas peticiones pueden ser modificados mediante parámetros. Como bien sabemos, node trabaja con objetos, lo que haremos a continuación es parametrizar la petición creando un objeto con los parámetros que deseamos enviar.
var request = require("request"); request({ uri: "http://www.guiadev.com", method: "GET", timeout: 10000, followRedirect: true, maxRedirects: 10 }, function(error, response, body) { console.log(body); });
Si se fijan, en las variables “uri” y “method” estoy definiendo que método utilizar; GET, POST, PUT, DELETE y hacia que url.
Los siguientes parámetros:
- Timeout: Le indica a la petición esperar 10 segundo para recibir una respuestas antes de ceder.
- FollowRedirect: Algunas paginas web poseen redirecciones, este parámetro con el valor en “true” indica que siga la redireccion.
- MaxRedirects: Le indica la cantidad de redirecciones que deseas seguir.
Por supuesto, hay otros parámetros que se pueden configurar mediante el objeto.
Enviando datos a través del formulario
Hasta ahora hemos visto como realizar peticiones GET. Pero ahora veamos como enviar una petición de tipo POST.
Supongamos que necesitamos enviar el nombre de un usuario para que una pagina en php realice x operación. En este caso utilizaremos el parámetro “form” para enviar el nombre de usuario.
var request = require("request"); request({ uri: "http://www.dominio.com/peticion/userform.php", method: "POST", form: { nombre: "John" } }, function(error, response, body) { console.log(body); });
Manejando las cookies
Las cookies son pedazos de data que se utilizan para rastrear al usuario mientras navega en la pagina web. Para facilitar el manejo de las cookies, request te provee de dos métodos, el método cookie() y el método jar().
En el siguiente código veremos como funcionan estos métodos.
var request = require("request"); var jar = request.jar(); var cookie = request.cookie("nombre=John"); jar.add(cookie); request({ uri: "http://www.dominio.com/peticion/userform.php", method: "GET", jar: jar }, function(error, response, body) { console.log(body); });
En la tercera linea, la cookie es creada con un valor especifico (nombre=John). Dicha cookie es añadida al jar creado en la segunda linea. Cuando se realiza la petición http el parámetro jar es utilizado para enviar la cookie al servidor.
Cuando el servidor recibe la petición, el usuario sera recibido como “John”.
Conclusión
Esto es parte de lo que puede hacer con este increíble modulo, sin embargo puedes buscar mas información en la web acerca de este modulo para enriquecer tu experiencia con él. Así como request hay otros excelentes módulos que llamaran tu atención y que convertirán a node en tu principal opción para el desarrollo de cualquier aplicación.