慕侠2389804
var http = require("http");var url = require("url");http.createServer(function (req, res) {var urlObj = url.parse(req.url, true); // 获取被代理的 URLvar urlToProxy = urlObj.query.url;if (!urlToProxy) {res.statusCode = 400;res.end("URL 是必须的。");}else {console.log("处理代理请求:" + urlToProxy);var parsedUrl = url.parse(urlToProxy);var opt = {host : parsedUrl.hostname,port : parsedUrl.port || 80,path : (parsedUrl.pathname || "") + (parsedUrl.search || "")+ (parsedUrl.hash || "")};http.get(opt, function(pres) { // 请求被代理 URL 的内容res.statusCode = pres.statusCode;var headers = pres.headers;for (var key in headers) {res.setHeader(key, headers[key]);}pres.on("data", function(chunk) {res.write(chunk); // 写回数据});pres.on("end", function() {res.end();});});}}).listen(8088, "127.0.0.1");console.log("代理服务器已经在 8088 端口启动。");整个代理服务器的实现比较简单。首先通过 http 模块中的 createServer() 方法用来创建一个 HTTP 服务器,再通过 listen() 方法就可以让该 HTTP 服务器在特定端口监听。在 createServer() 方法中传入的参数是 HTTP 请求的响应方法。实际上,每个 HTTP 请求都是对应于 HTTP 服务器上的一个 request 事件。