任意のWebサイトをプロキシし、クライアントにHTMLを提供する前にカスタムJSファイルを挿入するhttp-proxyがあります。プロキシされたWebサイトにアクセスしようとすると、いつでもハングアップするか、ブラウザが不確定にロードされるようです。しかし、HTMLソースを確認したところ、カスタムJavaScriptファイルを正常に挿入できました。これがコードです:
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);
}
私が何か悪いことをしている場合、誰かが教えてもらえますか?node-http-proxyは非常に死んでいるように見え、プロキシはときどき動作し、次の実行時に何回か死ぬことがあるので、それに頼ることはできませんサーバーを実行しました。
私は小さなPythonサーバーをCherryPyを使用して作成し、ウェブアプリケーションをmitmproxyでプロキシしました。すべてがスムーズに機能しています。node-http-proxyで間違っていたのかもしれませんが、懐疑的になりました本番環境での使用について。