Skip to content

Instantly share code, notes, and snippets.

@zbinlin
Created September 18, 2015 15:35
Show Gist options
  • Save zbinlin/24701c0da8dfb735ea3e to your computer and use it in GitHub Desktop.
Save zbinlin/24701c0da8dfb735ea3e to your computer and use it in GitHub Desktop.
http proxy
"use strict";
let http = require("http");
let url = require("url");
let server = http.createServer();
server.on("request", function (req, res) {
let headers = {};
for (const key of Object.keys(req.headers)) {
let val = req.headers[key];
if (key.indexOf("proxy-") != 0) {
headers[key] = val;
}
}
let method = req.method;
let httpVersion = req.httpVersion;
let path = url.parse(req.url).path;
let host = headers.host.split(":");
let remoteReq = http.request({
hostname: host[0],
port: host[1] || 80,
path: path,
method: method,
headers: headers
});
remoteReq.on("response", function (remoteRes) {
let statusCode = remoteRes.statusCode;
let statusMessage = remoteRes.statusMessage;
let headers = remoteRes.headers;
res.writeHead(statusCode, statusMessage, headers);
remoteRes.pipe(res);
});
req.pipe(remoteReq);
req.on("end", function () {
remoteReq.end();
});
});
server.on("listening", function () {
let address = server.address();
console.log(`opened server on ${address.family == "IPv6" ? `[${address.address}]` : address.address}:${address.port} listening...`);
});
server.listen(8888);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment