一、简介
1、Node.js标准库提供了http模块,其中封装了一个HTTP客户端。
2、http.request是一个HTTP客户端工具,用于向HTTP服务器发起请求。
二、客户端向HTTP服务器发起请求的两个重要函数
1、http.request(options, callback) :发起HTTP请求。参数option是一个类似关联数组的对象,表示请求的参数,callback是请求的回调函数。该函数返回一个http.ClientRequest的实例。
option常用的参数如下:
1)host:请求网站的域名或IP地址。
2)port:请求网站的端口,默认80。
3)method:请求方法,默认是GET。
4)path:请求的相对于根的路径,默认是“/”。请求参数应该包含在其中。
5)headers:一个关联数组对象,为请求头的内容。
callback传递一个参数,为http.ClientResponse的实例。
使用方式如下:
var http = require('http');
var querystring = require('querystring');
var contents = querystring.stringify({
name: 'cdu09',
email: 'cdu09@qq.com'
});
var options = {
host: '127.0.0.1',
path: '/application/node/post.php',
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(data);
});
});
req.write(contents);
req.end();
注意:不要忘了通过req.end()结束请求,否则服务器将不会收到信息。
2、http.get(options, callback):用于处理GET请求。它是http.request的简化版,唯一的区别在于http.get自动将请求方法设为了GET请求,同时不需要手动调用 req.end()。如下:
var http = require('http');
http.get({host: '127.0.0.1'}, function(res) {
res.setEncoding('UTF-8');
res.on('data', function (data) {
console.log(data);
});
});
三、http.ClientRequest对象
1、http.ClientRequest是由http.request或http.get返回产生的对象,表示一个已经产生而且正在进行中的HTTP请求。它提供一个response事件,即http.request或http.get第二个参数指定的回调函数的绑定对象。也可以显式地绑定这个事件的监听函数,如下:
var http = require('http');
var req = http.get({host: '127.0.0.1'});
req.on('response', function(res) {
res.setEncoding('UTF-8');
res.on('data', function (data) {
console.log(data);
});
});
2、http.ClientRequest与http.ServerResponse 一样也提供了write和end函数,用于向服务器发送请求体,通常用于POST、PUT等操作。所有写结束以后必须调用end函数以通知服务器,否则请求无效。
3、http.ClientRequest的函数request.abort():终止正在发送的请求。
4、http.ClientRequest的函数request.setTimeout(timeout, [callback]):设置请求超时时间,timeout为毫秒数。当请求超时以后,callback将会被调用。
5、还有request.setNoDelay([noDelay])、request.setSocketKeepAlive([enable], [initialDelay]) 等函数。
四、http.ClientResponse对象
1、http.ClientResponse与http.ServerRequest 相似,提供了三个事件data、end和close,分别在数据到达、传输结束和连接结束时触发,其中data事件传递一个参数chunk,表示接收到的数据。
2、http.ClientResponse提供了一些属性,用于表示请求的结果状态,如下图:
3、函数response.setEncoding([encoding]):设置默认的编码,当data事件被触发时,数据将会以encoding编码。默认值是null,即不编码,以Buffer的形式存储。
4、函数response.pause():暂停接收数据和发送事件。
5、函数response.resume():从暂停的状态中恢复。