1. 程式人生 > >node.js http客戶端

node.js http客戶端

     一、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])等函式。

    三、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():以暫停的狀態中恢復