nodejs编写一个http代理服务器代码
代码语言:nodejs
所属分类:通讯
代码描述:nodejs编写一个http代理服务器代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
var net = require('net'); var local_port = 8893; //在本地创建一个server监听本地local_port端口 net.createServer(function (client) { //首先监听浏览器的数据发送事件,直到收到的数据包含完整的http请求头 var buffer = new Buffer(0); client.on('data',function(data) { buffer = buffer_add(buffer,data); if (buffer_find_body(buffer) == -1) return; var req = parse_request(buffer); if (req === false) return; client.removeAllListeners('data'); relay_connection(req); }); //从http请求头部取得请求信息后,继续监听浏览器发送数据,同时连接目标服务器,并把目标服务器的数据传给浏览器 function relay_connection(req) { console.log(req.method+' '+req.host+':'+req.port); //如果请求不是CONNECT方法(GET, POST),那么替换掉头部的一些东西 if (req.method != 'CONNECT') { //先从buffer中取出头部 var _body_pos = buffer_find_body(buffer); if (_body_pos < 0) _body_pos = buffer.length; var header = buffer.slice(0,_body_pos).toString('utf8'); //替换connection头 header = header.replace(/(proxy\-)?connection\:.+\r\n/ig,'') .replace(/Keep\-Alive\:.+\r\n/i,'') .replace("\r\n",'\r\nConnection: close\r\n'); //替换网址格式(去掉域名部分) if (req.httpVersion == '1.1') { var url = req.path.replace(/http\:\/\/[^\/]+/,''); if (url.path != url) header = header.replace(req.path,url); } buffer = buffer_add(new Buffer(header,'utf8'),buffer.slice(_body_pos)); } //建立到目标服务器的连接 var server = net.createConnection(req.port,req.host); //交换服务器与浏览器的数据 client.on("data", function(data){ server.write(data); }); server.on("data", function(data){ client.write(data); }); if (req.method == 'CONNECT') client.write(new Buffer("HTTP/1.1 200 Connection established\r\nConnection: close\r\n\r\n")); else server.write(buffer); } }).listen(local_port); console.log(.........完整代码请登录后点击上方下载按钮下载查看
网友评论0