Como realizar una petición HTTP en Node JS Blog
Tengo planeado viajar el próximo año para Asia, así que estoy monitorizando el costo de los vuelos; hacerlo de manera manual me consume tiempo y como quiero hacer varias escalas los sistemas como Kayak no me notifican cambios de precio.
Para solucionar este problema decidí escribir un programa en Node JS que esté monitorizando diariamente los precios de las rutas que me interesan, si detecta cambio de precios me manda un correo avisándome que los precios han variado y ya yo decidiré si me conviene comprar o no, también voy guardando los resultados para que en algún momento (cuando tenga tiempo libre), pueda desplegar los resultados en una gráfica y saber cuando es que estuvo más económico.
Ya que la mayoría de las páginas donde cotizas los vuelos no tienen un API para consultar, necesito manualmente hacer el request a cada página, recibir el html y usando jQuery parsear los resultados y sacar la información usando algunos selectores. En este tutorial quiero mostrar como hacer las consultas HTTP para consultar cualquier página web desde Node JS.
Lo primero que debemos hacer es instalar el paquete request. A continuación muestro mi archivo package.json.
{ "name": "flights", "version": "0.1.0", "description": "A tool to get the prices for Flights, it will send emails when price changes.", "main": "robot.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "Crysfel Villa", "license": "MIT", "dependencies": { "jquery": "^2.1.1", "jsdom": "^1.2.1", "nodemailer": "^1.3.0", "request": "^2.47.0", //<----- "tough-cookie": "^0.12.1" //<----- } }
Las únicas dos dependencias que nos interesan para este tutorial es request y tough-cookie, puedes borrar las otras si gustas. Para instalarlas lo haces con el npm de la siguiente manera.
$ npm install
Una vez que tenemos instaladas las dependencias vamos a consultar una página web de la siguiente manera.
var request = require('request'); //Step 1 - Set the headers var headers = { 'User-Agent': 'Super Agent/0.0.1', 'Content-Type': 'application/x-www-form-urlencoded' } //Step 2 - Configure the request var options = { url : 'http://quizzpot.com/courses', method : 'GET', jar : true, headers : headers } //Step 3 - do the request request(options, function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body); } });
- En el paso uno configuramos los header que enviaremos en la petición.
- En el paso dos definimos las configuraciones, aquí definimos la URL a donde haremos la petición, el método http que usaremos, los headers y que usaremos soporte para cookies, simplemente con la propiedad jar:true agregamos soporte para cookies.
Con esto estamos listos para realizar la consulta, el servidor responderá y para saber que no sucedió ningún error tenemos la variable error en el callback, así como el objeto response con el status y el body de la respuesta.
Realmente es muy sencillo realizar peticiones http a servidores externos, también podríamos consultar alguna API JSON o servicio REST.
Happy coding!
Se el primero en comentar!