上一篇说到了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);
})
});
时间: 2024-11-05 14:50:09