nodejs-http客户端

本文详细介绍了如何使用Node.js的http模块发起HTTP请求,并展示了客户端和服务端的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http 模块提供了两个函数 http.request 和 http.get,功能是作为客户端向 HTTP 服务器发起请求。
http.request(options, callback) 发起 HTTP 请求。接受两个参数,option 是 一个类似关联数组的对象,表示请求的参数,callback 是请求的回调函数。
option 常用的参数如下所示。
 host :请求网站的域名或 IP 地址。
 port :请求网站的端口,默认 80。
 method :请求方法,默认是 GET。
 path :请求的相对于根的路径,默认是“/”。QueryString 应该包含在其中。 例如 /search?query=byvoid。
 headers :一个关联数组对象,为请求头的内容。
callback 传递一个参数,为 http.ClientResponse 的实例。 http.request 返回一个 http.ClientRequest 的实例。 
服务端的代码为:
var http = require("http");//获取http对象
var url = require("url");//获取url对象
var querystring = require("querystring");//获取querystring对象
http.createServer(
  //匿名的回调函数,当有请求进来的时候调用该函数
  //req参数相当于J2EE的HttpServletRequest,
  //res参数相当于J2EE的HttpServletResponse
	function(req,res){
	  	res.writeHead(200,{"Content-Type":"text/html"});
	  	//获取请求地址
	  	var requresturl = req.url;
	    res.write("request url:" + requresturl + "<br/>");
	    //请求的路径
	    var pathname = url.parse(req.url).pathname;
	    res.write("pathname:" + pathname + "<br/>");
	    //请求的参数
	    var querystr = url.parse(req.url).query;
	    res.write("query str : " + querystr + "<br/>");

	    //请求的地址进行所有属性的解析
	    var obj = url.parse(req.url);
	    res.write(JSON.stringify(obj)+"<br/>");
	    res.write("<hr/>");

	    //请求的参数转为JSON格式
	    var params = querystring.parse(querystr);
	    res.write(JSON.stringify(params)+"<br/>");
	    res.write("<hr/>");
	    
	    res.end("please input a url like  : http://172.24.12.38:3000/aa/b/c/a.do?a=1&b=4");
	}
).listen(3000); //监听3000端口

console.log(" HTTP Server is Listening at port 3000.");

客户端发送请求的代码为:

var http = require("http");//获取http对象
var querystring = require("querystring");//获取querystring对象
var contents = querystring.stringify({
	name:'devil13th',
	email:'devil13th@163.com',
	addr : ' China BeJing Xizhimen Xinjiekou'
})

/*
http.request(options, callback) 发起 HTTP 请求。接受两个参数,option 是
一个类似关联数组的对象,表示请求的参数,callback 是请求的回调函数
 --- option
常用的参数如下所示。
 host :请求网站的域名或 IP 地址。
 port :请求网站的端口,默认 80。
 method :请求方法,默认是 GET。
 path :请求的相对于根的路径,默认是“/”。QueryString 应该包含在其中。
例如 /search?query=byvoid。
 headers :一个关联数组对象,为请求头的内容。
 ----callback 传递一个参数,为 http.ClientResponse 的实例。
 
http.request 返回一个 http.ClientRequest 的实例。
*/
var options = {
	host:'172.26.192.180',
	path:'/aa/b/c/a.do?a=1&b=4',
	method:'get',
	port:3000,
	headers:{
		'Content-Type':'application/x-www-form-urlencoded',
		'Content-Length':contents.length
	}
}

//创建http.ClientRequest对象 ,
/*表示一个已经产生而且正在进行中的 HTTP 请求。
它提供一个 response 事件,
即 http.request或 http.get 第二个参数指定的回调函数的绑定对象。
*/

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() 结束请求,否则服务器将不会收到信息。
打开两个bash,先运行服务器代码,在运行客户端代码我们可以看到 
 

http.ClientRequest对象
http.ClientRequest 是由 http.request 或 http.get 返回产生的对象,表示一 个已经产生而且正在进行中的 HTTP 请求。它提供一个 response 事件,即 http.request 或 http.get 第二个参数指定的回调函数的绑定对象。 
http.ClientRequest 像 http.ServerResponse 一样也提供了 write 和 end 函 数,用于向服务器发送请求体,通常用于 POST、PUT 等操作。所有写结束以后必须调用 end 函数以通知服务器,否则请求无效。http.ClientRequest 还提供了以下函数。
request.abort():终止正在发送的请求。
request.setTimeout(timeout, [callback]):设置请求超时时间,timeout 为 毫秒数。当请求超时以后,callback 将会被调用。
此外还有request.setNoDelay([noDelay])、request.setSocketKeepAlive ([enable], [initialDelay]) 等函数,参见api
http.ClientResponse
http.ClientResponse 与 http.ServerRequest 相似,提供了三个事件 data、end 和 close,分别在数据到达、传输结束和连接结束时触发,其中 data 事件传递一个参数 chunk,表示接收到的数据。
http.ClientResponse 也提供了一些属性,用于表示请求的结果状态
statusCode HTTP 状态码,如 200、404、500
httpVersion HTTP 协议版本,通常是 1.0 或 1.1
headers HTTP 请求头
trailers HTTP 请求尾(不常见)
http.ClientResponse 还提供了以下几个特殊的函数。
 response.setEncoding([encoding]):设置默认的编码,当 data 事件被触发 时,数据将会以 encoding 编码。默认值是 null,即不编码,以 Buffer 的形式存 储。常用编码为 utf8。
 response.pause():暂停接收数据和发送事件,方便实现下载功能。
 response.resume():从暂停的状态中恢复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值