Tengo un proxy HTTP proxy cualquier sitio web e inyectar algún archivo JS personalizado antes de servir la parte posterior HTML al cliente. Cada vez que intento acceder a la página web proxy, ya que colgará o el navegador parece cargar de forma indeterminada. Pero cuando compruebo el código HTML, he conseguido con éxito para inyectar mi costumbre archivo JavaScript. Aquí está el código:
const cheerio = require('cheerio');
const http = require('http');
const httpProxy = require('http-proxy');
const { ungzip } = require('node-gzip');
_initProxy(host: string) {
let proxy = httpProxy.createProxyServer({});
let option = {
target: host,
selfHandleResponse: true
};
proxy.on('proxyRes', function (proxyRes, req, res) {
let body = [];
proxyRes.on('data', function (chunk) {
body.push(chunk);
});
proxyRes.on('end', async function () {
let buffer = Buffer.concat(body);
if (proxyRes.headers['content-encoding'] === 'gzip') {
try {
let $ = null;
const decompressed = await ungzip(buffer);
const scriptTag = '<script src="my-customjs.js"></script>';
$ = await cheerio.load(decompressed.toString());
await $('body').append(scriptTag);
res.end($.html());
} catch (e) {
console.log(e);
}
}
});
});
let server = http.createServer(function (req, res) {
proxy.web(req, res, option, function (e) {
console.log(e);
});
});
console.log("listening on port 5051");
server.listen(5051);
}
Por favor alguien puede decirme si estoy haciendo mal nada, parece que el nodo-http-proxy está muriendo mucho y no se puede confiar mucho en él desde el proxy puede trabajar a veces y morir en la próxima carrera, dependiendo de cuántas veces me encontré con el servidor.
Terminé de escribir un pequeño servidor de Python usando CherryPy y con proxy de la aplicación web con mitmproxy. Ahora todo está funcionando sin problemas. Tal vez lo estaba haciendo mal con el nodo-http-proxy pero también se convirtió en escéptico acerca de su uso en un entorno de producción.