HTTP客户端向服务器请求数据

一、HTTP客户端向其他网站请求数据

在node.js中,我们可以轻松的向任何网站发送请求并读取该网站的响应数据:

在http模块中,我们可以使用Request方法向服务器(其他网站)请求数据。Request方法的使用方式如下:

var req = http.request(opts,callback);

我们注意到在request方法中有两个参数,其中opts参数为一个对象或者字符串,用于指定请求的目标url地址。如果opts参数值为一个字符串,将自动使用url模块中的parse方法转换为一个对象。其中opts参数值或者使用parse方法转换后的对象中,可以指定的属性有:

  • host: 用于指定域名或者目标主机的IP地址,默认的为localhost
  • hostname: 与host属性值相同,但是如果host和hostname的值都被绑定,那么将会优先使用hostname
  • port: 指定目标服务器用于HTTP客户端连接的端口号
  • localAddress:用于指定专用于网络连接的本地端口
  • socketPath:用于指定目标UNix域端口
  • method:用于指定HTTP请求方法,,默认属性值为get
  • path:用于指定请求路径及查询字符串,默认属性值为”/“
  • headers:用于指定客户端请求头对象
  • auth:用来指定认证信息部分
  • agent:用于指定HTTP代理

    headers = {
        'Content-Type': 'application/json',
        'Content-Length': reqBodyStr.length
    };

    options = {
        host: 'localhost',
        port: 4000,
        path: path,
        method: 'GET',
        headers: headers
    };

    internalReq = http.request(options, function (newRes) {
        newRes.setEncoding('utf-8');

        var responseString = '';

        newRes.on('data', function (data) {
            responseString += data;
        });

        newRes.on('end', function () {
            try {
                var resultObject = JSON.parse(responseString);
                //console.log(resultObject);
                next(resultObject);
                //res.send(resultObject);
            }catch (e){
                //res.send('error');
            }

        });
    });
    internalReq.on('error', function (e) {

    });
    internalReq.write(reqBodyStr);
    internalReq.end();
其中,
newRes.on('data', function (data) {
            responseString += data;
        });

客户端接收到数据 ;

newRes.on('end', function () {

});
服务端结束响应。

二、制作代理服务器

制作代理服务器的大概流程为:
首先创建一个HTTP服务器,当服务器接收到客户端请求后,向 被代理网站(www.baidu.com)请求数据,接收到数据之后将响应数据发送给客户端。
server = http.createServer(function(sreq,sres) {
  url_parts = url.parse(sreq.url);
  options = {
    host:'www.baidu.com',
    port:80,
    path:url_parts.pathname,
    headers: sreq.headers
  };
  creq = http.get(options,function(cres) {
    sres.writeHead(cres.statusCode,cres.headers);
    cres.pipe(sres);
    });
  sres.pipe(creq);
});
server.listen(3000,'127.0.0.1');
上述代码便实现了代理服务器。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值