node.js server proxy(服务代理)编程

本文介绍了一个使用Node.js实现的服务代理示例。通过创建HTTP服务器并利用net模块进行连接,实现了基本的服务代理功能。此外,还展示了如何创建双向绑定管道以实现数据传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    node.js 服务代理编程,练习使用connet做一个简单的服务代理示例:

/**
 * Created by Administrator on 14-5-4.
 */

var http = require('http');
var net = require('net');
var url = require('url');

/**
 * 说明:如何创建一个代理服务器
 * @type {*}
 */
var proxy = http.createServer(function(req,res){
    res.writeHead(200,{'Content-Type': 'text/plain'});
    res.end('okay');
});

/**
 * 说明:创建一个connect链接,并双向绑定管道
 */
proxy.on('connect',function(req,cltSocket,head){
    var  srvUrl = url.parse('http://' + req.url);
    var srvSocket = net.connect(srvUrl.port,srvUrl.hostname,function(){
        cltSocket.write('HTTP/1.1 200 Connection Established\r\n' +
            'Proxy-agent: Node-Proxy\r\n' +
            '\r\n');
        srvSocket.write(head);
        srvSocket.pipe(cltSocket);
        cltSocket.pipe(srvSocket);
    });
})

/**
 * 现在运行代理
 */
proxy.listen(1337,'127.0.0.1',function(){
    //创建一个隧道代理请求
    var options = {
        port:1337,
        hostname:'127.0.0.1',
        method:'CONNECT',
        path:'www.google.com:80'
    };

    var req = http.request(options);
    //只创建一个请求的链接,只需要返回一个request对象
    req.end();

    req.on('connect',function(req,socket,head){
        console.log('got connected!');
        socket.write('GET / HTTP/1.1\r\n' +
            'Host: www.google.com:80\r\n' +
            'Connection: close\r\n' +
            '\r\n');
        socket.on('data',function(chunk){
           console.log(chunk.toString());
        });
        socket.on('end',function(chunk){
            proxy.close();
        });
    });
});


转载于:https://my.oschina.net/antianlu/blog/233142

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值