node.js http客户端

来源:互联网 发布:java textarea 滚动条 编辑:程序博客网 时间:2024/05/16 12:44

     一、http模块提供了两个函数http.request和http.get,功能是作为客户端向HTTP服务器发起请求。

            Ext.Ajax.request({},function(response))

            1.http.request(options,callback)发起HTTP请求,接受两个参数,option是一个类似关联数组的对象,表示请求的参数,callback是请求的回调函数,option常用的参数如下

                host:请求网站的域名或IP地址
                port:请求网站的端口,默认是80,
                method:请求方法,模式是GET/POST
                path:请求的相对于根的路径,默认是"/"。QueryString应该包含在其中,例如/search?query=marico
                headers:一个关联数组对象,为请求头的内容
            callback传递一个参数,为http.ClientResponse的实例
            http.request返回一个http.ClientRequest的实例
         案例:clientRequest.js
var http=require('http');var querystring=require('querystring');//启动服务http.createServer(function(req,res){console.log('请求到来,解析参数');//解析post请求var post='';req.on('data',function(chunk){post+=chunk;});req.on('end',function(){post=querystring.parse(post);//解析完成console.log('参数解析完成,返回name参数');res.end(post.name);});}).listen(3000);//客户端请求var contents=querystring.stringify({name:'marico',age:21,address:'beijing'});//Ext.encode();//声明请求参数var options={host:'localhost',path:'/',port:3000,method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded','Content-Length':contents.length}};//发送请求var req=http.request(options,function(res){res.setEncoding('utf-8');res.on('data',function(data){console.log('后台返回数据');console.log(data);})});req.write(contents);//必须调用end()req.end();



            2.http.get(options,callback) http模块还提供了一个更加简便的方法用于处理GET请求:http.get。它是http.request的简化版,唯一的区别在于http.get自动将请求方法设为GET请求,同时不需要手动调用req.end();

            
            案例:clientGet.js
var http=require('http');var url=require('url');var util=require('util');//启动服务http.createServer(function(req,res){console.log('请求到来,解析参数');var params=url.parse(req.url,true);console.log('解析完成');console.log(util.inspect(params));console.log('向客户端返回');res.end(params.query.name);}).listen(3000);//客户端请求var request=http.get({host:'localhost',path:'/user?name=marico&age=21',port:3000},function(res){res.setEncoding('utf-8');res.on('data',function(data){console.log(' 服务端相应回来的数据为:'+data);})});


    二、http.ClientRequest

                   该对象是由http.request或http.get返回产生的对象,表示一个已经产生而且正在进行的HTTP请求,它提供了response事件,即http。request或http.get第二个参数制定的回调函数的绑定对象,请求必须调用end方法结束请求。
        提供的函数:
                request.abort() 终止正在发送的请求
                request.setTimeout(timeout,[callback]) 设置请求超时时间,timeout为毫秒数,当请求超时后,callback将会被调用
                其它:request.setNoDelay([noDelay])、request.setScoketKeepAlive([enable],[initialDelay])等函数。
                  API地址:http://nodejs.org/api/http.html

    三、http.ClientResponse

                http.ClientReponse是与http.ServerResponse相似,提供三个事件,data、end和close,分别在数据到达,传输结束和连接结束时触发,其中data事件传递一个参数chunk,表示接受到的数据
            属性,表示请求的结果状态
                statusCode   HTTP状态码,如200,404,500
                httpVersion:HTTP协议版本
                headers:HTTP请求头
                trailers:HTTP请求尾
            函数:
                    response.setEncoding([encoding]):设置默认的编码,当data事件被触发时,数据将以encoding编码。默认值为null,以buffer的形式存储。
                    response.pause():暂停接受数据和发送事件,方便实现下载功能。
                    response.resume():以暂停的状态中恢复