上一篇說到了http模塊的服務器篇,在這個文章裏面我們討論一下http模塊的客戶端篇
1.http客戶端
http模塊提供了兩個函數http.request
和http.get
,功能是客戶端向服務器端發送請求。
1.1 http.request
http.request(options,callback)用於發起http請求,接收兩個參數,options
是一個類似關聯數組的對象,裏面包含一些請求的參數,callback
表示請求後的回調。options
常用的參數如下:
名稱 | 含義 |
host | 請求網站的域名或IP地址 |
port | 請求網站的端口,默認是80 |
methods | 請求方法,默認是GET |
path | 請求的相對於根的路徑,默認是”/”。QueryString含在其中,例如/search?query=helios |
headers | 一個關聯數組對象,爲請求頭的內容 |
還要注意一點http.ClientRequest對象由http.request()創建並返回,也就是說http.request返回一個http.ClientRequest的實例
下面來看一組本機客戶端發給本機服務器的程序
var http=require('http');
var querystring=require('querystring');
//啓動服務
http.createServer((req,res)=>{
console.log("request already come");
var post = "";
req.on('data',(chunk)=>{
post += chunk;
});
req.on('end',()=>{
//querystring.parse 將字符串轉換爲json的格式
post = querystring.parse(post);
console.log('complete complished');
//返回請求者一個信息
res.write(post.name);
res.end();
});
}).listen(3000);
//將一個對象轉換爲json的字符串
var contents = querystring.stringify({
name:'helios',
age:21,
address:'changsha'
});
//聲明請求的參數 options
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,(res)=>{
res.setEncoding('utf-8');
res.on('data',(data)=>{
console.log('return :');
console.log(data);
});
});
req.write(contents);
req.end();
1.2get方法
http模塊還提供了http.get(options,callback)
,用來更簡單的處理GET
方式的請求,它是http.request
的簡化版本,唯一的區別在於http.get自動將請求方法設爲GET請求,同時不需要手動調用req.end();
這個就好像jQuery
中的$.ajax
和$.GET
的區別。
下面來看一下具體代碼:
var http=require('http');
var querystring=require('querystring');
var url = require('url');
http.createServer(()=>{
console.log('request come');
//將傳過來的URL轉變爲對象
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=helios&age=22',
port:3000},function(res){
res.setEncoding('utf-8');
res.on('data',function(data){
console.log(' 服務端相應回來的數據爲:'+data);
})
});