simple http proxy server written in nodejs

用nodejs的http模块实现的http代理服务器,不支持https代理。

http-proxy.js

var http = require('http');http.createServer(function(request, response) {    var ip = request.connection.remoteAddress;    console.log(ip + ": " + request.method + " " + request.url);    console.log(JSON.stringify(request.headers, null, 4));    var proxy = http.request(request.url);    proxy.on('response', function(res) {        res.on('data', function(chunk) {            response.write(chunk, 'binary');        });        res.on('error', function(err) {            console.log('proxy error: ' + err.message);            response.end();        });        res.on('end', function() {            response.end();        });        response.writeHead(res.statusCode, res.headers);    });    request.on('data', function(chunk) {        proxy.write(chunk, 'binary');    });    request.on('error', function(err) {        console.log('request error' + err.message);        proxy.end();    });    request.on('end', function() {        proxy.end();    });}).listen(8080);console.log("proxy server listen on 8080.");

node运行此脚本,代理服务器在8080端口开始监听。写个http请求测试如下:

http-proxy-test.js

var request = require('request');process.argv.forEach(function(value, index, array) {    console.log(index + ': ' + value);});var url = process.argv.pop();if (!/^http/i.test(url)) {    url = 'https://yuweijun.github.io';}request({url: url, proxy: 'http://localhost:8080'}, function(err, response, body) {    if (err) {        console.log('request err: ' + err.message);    } else if (response.statusCode == 200) {        console.log(body.length);    } else {        console.log(JSON.stringify(response, null, 4));    }});

在命令行里输入:

 node http-proxy-test.js https://yuweijun.github.io