Para esta lección necesitamos escribir un programa que preforme una petición HTTP GET a una URL, y escriba los datos de respuesta en la consola. Las peticiones GET son uno de los métodos de petición permitidos en el Protocolo de transferencia de hipertexto (HTTP).

Leccion-7 learnyounode Lección 7 - Cliente HTTP

La petición GET sólo recupera datos del recurso especificado (determinado por la URL en la que se utiliza la petición). Las peticiones GET se consideran operaciones seguras que no cambian el estado del servidor al que se envía la petición porque sólo recupera información.

El módulo HTTP del nodo tiene varios métodos para las peticiones HTTP, incluyendo get(). Una petición GET convertida en una cadena devolverá un documento HTML desde el servidor donde se envía la petición. Echa un vistazo a la solución de abajo para ver cómo se hace esto con el nodo.

var http = require(‘http’)
var url = process.argv[2]
 
http.get(url, function (response) {
  response.on(‘data’, function (data) {
    console.log(data.toString());
  })
})


En la solución anterior, estamos registrando la respuesta de http.get() a la consola pasando la URL variable y una función de devolución de llamada al método http.get(). En la devolución de llamada, estamos llamando al método response.on() en datos, y luego pasando los datos a otra devolución de llamada para registrarla en la consola.

Solución oficial

var http = require(‘http’)
 
http.get(process.argv[2], function (response) {
  response.setEncoding(‘utf8’)
  response.on(‘data’, console.log)
  response.on(‘error’, console.error)
}).on(‘error’, console.error)  

La solución oficial hace las cosas un poco diferentes. En lugar de convertir la respuesta a http.get() con el método toString(), se utiliza el método setEncoding() para establecer la codificación de respuesta en utf8. Además, el método on() se utiliza para registrar los datos o errores de la respuesta a la consola.

Otra solución

Las soluciones anteriores funcionarán bien. La solución oficial es posiblemente la mejor porque también verifica y registra los errores en la función de respuesta. Sin embargo, una cosa que la solución oficial no hará es devolver una respuesta a las peticiones https GET. Hacer peticiones https GET es tan fácil como hacer una petición http GET. Vea la solución a continuación para ver cómo se logra esto.

var http = require(‘http’)
var https = require(‘https’)
 
var url = process.argv[2]
var prefix = url.substring(0,8)
 
if (prefix === ‘https://’){
  https.get(url, function (response) {
    response.on(‘data’, function (data) {
      console.log(data.toString());
    })
  })
} else {
  http.get(url, function (response) {
    response.on(‘data’, function (data) {
      console.log(data.toString());
    })
  })
}

En el ejemplo anterior asignamos una substring() de la variable url a la variable prefijo. La subcadena tiene la misma longitud que https://' lo que nos permite comprobar si el prefijo de la url es igual ahttps://’. Si lo es, lo pasamos al método https.get(). Si no lo es, lo pasamos al método http.get() en su lugar.

La solución alternativa anterior podría mejorarse comprobando también si hay errores en la respuesta, como la solución oficial.

Reader Interactions

Deja un comentario

Tu dirección de correo electrónico no será publicada.

About David Moya

Apasionado de la Seguridad Informática, aprendiendo en todo momento y profundizando en el mundo web y en el posicionamiento en buscadores.

Share This