Esta es una de mis primeras veces usando el módulo https node.js e intenté hacer una solicitud GET con este código
const url = new URL("valid url") //I did put a valid url https.get({ host: url.hostname, path: url.pathname, headers: { "Content-Type": "application/json" } }, (res) => { res.setEncoding("utf8") let str = "" res.on("data", c => { console.log(c) }) res.on("end", () => { console.log(str) //this was meant to log the data but I removed the "str += c" from the data callback }) })Pero esto registra lo siguiente:
▼� �VJ-*�/��LQ�210ЁrsS��‼�S����3KR§2�§�R♂K3�RS�`J�↕sA�I�)�♣�E@NIj�R-��♥g��PP Pero creo que .setEncoding("utf8") funcionaría. ¿Tiene algo que ver con los encabezados? ¿O tal vez el objeto URL ? El resultado que quiero está en un elemento <pre> y es JSON válido.
Como dijo @James en su comentario , el contenido estaba comprimido. Hacer esto funcionó:
import https from "https" import { createGunzip } from "zlib" const url = new URL("valid url") const req = https.get(url, (res) => { //I found out you can use a URL object let str = "" let output; //See if it's compressed so we can read it properly var gzip = createGunzip() res.headers["content-encoding"] == "gzip" ? output = res.pipe(gzip) : output = res; output.on("data", c => { str = c.toString() }) output.on("end", () => { console.log(JSON.parse(str || "{}")) //logs the correct object }) })