initial
This commit is contained in:
commit
adb9d33971
4 changed files with 110 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
node_modules
|
80
main.js
Normal file
80
main.js
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
var http = require('http');
|
||||||
|
const https = require('https');
|
||||||
|
const zlib = require("zlib");
|
||||||
|
|
||||||
|
|
||||||
|
const TARGET_HOST = 'example.org';
|
||||||
|
|
||||||
|
const resetAnsi = "\u001B[0m";
|
||||||
|
function setColor(r, g, b) {
|
||||||
|
return "\x1b[38;2;" + r + ";" + g + ";" + b + "m";
|
||||||
|
}
|
||||||
|
|
||||||
|
//create a server object:
|
||||||
|
http.createServer(function (req, res) {
|
||||||
|
let headers = { ...req.headers, host: TARGET_HOST };
|
||||||
|
const options = {
|
||||||
|
hostname: TARGET_HOST,
|
||||||
|
path: req.url,
|
||||||
|
headers,
|
||||||
|
method: req.method ?? "POST",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
let request = https.request(options, (response) => {
|
||||||
|
const resp_headers = { ...response.headers, };
|
||||||
|
res.writeHead(response.statusCode, resp_headers);
|
||||||
|
|
||||||
|
const isGzip = resp_headers["content-encoding"] === "gzip";
|
||||||
|
|
||||||
|
let body_response = [];
|
||||||
|
const gunzip = zlib.createGunzip();
|
||||||
|
|
||||||
|
function finish() {
|
||||||
|
body = Buffer.concat(body).toString();
|
||||||
|
body_response = Buffer.concat(body_response).toString();
|
||||||
|
console.log(
|
||||||
|
`${setColor(255, 255, 255)}Request on (${req.method}): ${req.url}
|
||||||
|
- ${setColor(100, 0, 0)}headers: ${Object.entries(headers).map(([a, b]) => a + "=" + b).join(", ")}
|
||||||
|
- ${setColor(200, 0, 0)}request: ${body}
|
||||||
|
- ${setColor(0, 100, 0)}response headers: ${Object.entries(resp_headers).map(([a, b]) => a + "=" + b).join(", ")}
|
||||||
|
- ${setColor(0, 200, 0)}recieved: ${body_response}
|
||||||
|
${resetAnsi}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
response.on('data', function (chunk) {
|
||||||
|
if (isGzip) gunzip.write(chunk);
|
||||||
|
else body_response.push(chunk);
|
||||||
|
res.write(chunk);
|
||||||
|
});
|
||||||
|
|
||||||
|
gunzip.on('data', function (chunk) {
|
||||||
|
body_response.push(chunk);
|
||||||
|
});
|
||||||
|
gunzip.on("end", finish);
|
||||||
|
|
||||||
|
response.on('end', function () {
|
||||||
|
if (isGzip) gunzip.end();
|
||||||
|
else {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
res.end();
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
let body = [];
|
||||||
|
req
|
||||||
|
.on('error', err => {
|
||||||
|
console.error(err);
|
||||||
|
})
|
||||||
|
.on('data', chunk => {
|
||||||
|
request.write(chunk);
|
||||||
|
body.push(chunk);
|
||||||
|
})
|
||||||
|
.on('end', () => {
|
||||||
|
request.end();
|
||||||
|
});
|
||||||
|
}).listen(10920);
|
||||||
|
|
23
package-lock.json
generated
Normal file
23
package-lock.json
generated
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
{
|
||||||
|
"name": "node-proxy",
|
||||||
|
"lockfileVersion": 3,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"dependencies": {
|
||||||
|
"http": "^0.0.1-security",
|
||||||
|
"https": "^1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/http": {
|
||||||
|
"version": "0.0.1-security",
|
||||||
|
"resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz",
|
||||||
|
"integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g=="
|
||||||
|
},
|
||||||
|
"node_modules/https": {
|
||||||
|
"version": "1.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz",
|
||||||
|
"integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
6
package.json
Normal file
6
package.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"dependencies": {
|
||||||
|
"http": "^0.0.1-security",
|
||||||
|
"https": "^1.0.0"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue