Node中http模块详解(客户端篇)

上一篇说到了http模块的服务器篇,在这个文章里面我们讨论一下http模块的客户端篇

1.http客户端

http模块提供了两个函数http.requesthttp.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-08-28 19:16:08

Node中http模块详解(客户端篇)的相关文章

Node中http模块详解(服务端篇)

Node中的Http Node中提供了http模块,其中封装了高效的http服务器和http客户端 http.server是一个基于事件的HTTP服务器,内部是由c++实现的,接口由JavaScript封装 http.request是一个HTTP客户端工具.用户向服务器发送数据. 下面就来分别得介绍一下http的服务端和客户端 一.HTTP服务器 http.Server实现的,它提供了一套封装级别很低的API,仅仅是流控制和简单的解析,所有的高层功能都需要通过它的接口,就像在前面的文章<Node

Python中time模块详解

在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同. UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST

Python中time模块详解(转)

Python中time模块详解(转) 在平常的代码中,我们常常需要与时间打交道.在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同. UTC(Coordinated Universal Ti

python中threading模块详解(一)

python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thread模块更高层的API来提供线程的并发性.这些线程并发运行并共享内存. 下面来看threading模块的具体用法: 一.Thread的使用 目标函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行. 这里对使用多线程并发,和不适用多线程并发做

python中常用模块详解二

log模块的讲解 1 Python 使用logging模块记录日志涉及四个主要类,使用官方文档中的概括最为合适: 2 3 logger提供了应用程序可以直接使用的接口API: 4 handler将(logger创建的)日志记录发送到合适的目的输出: 5 formatter决定日志记录的最终输出格式 6 filter提供了细度设备来决定输出哪条日志记录: 7 8 logger 9 每个程序在输出信息之前都要获得一个Logger.Logger通常对应了程序的模块名, 10 比如聊天工具的图形界面模块

NodeJS中Buffer模块详解

一,开篇分析 所谓缓冲区Buffer,就是 "临时存贮区" 的意思,是暂时存放输入输出数据的一段内存. JS语言自身只有字符串数据类型,没有二进制数据类型,因此NodeJS提供了一个与String对等的全局构造函数Buffer来提供对二进制数据的操作.除了可以读取文件得到Buffer的实例外,还能够直接构造,例如: 复制代码 代码如下: var buffer = new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ; Buffer与字符串类似,除了

Node中的定时器详解

在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,node与javascript都具有将代码延迟一段时间的能力.在node中可以使用三种方式实现定时功能:超时时间,时间间隔和即时定时器.虽然有这三种定时器功能但是在平常的业务中使用还是有差别的,下来我们就一起讨论一下这三种定时器. 1.用超时时间来延迟工作 超时定时器用于将工作延迟一个特定的时间数量,当时间到了,回调函数执行,而定时器会消失.(建议:对于只执行一次的工作,使用超时时间). 1秒之后执行my

httpd配置文件中常用模块详解一

本文对http2.2常用的模块作了总结 注意:关闭selinux和iptables 永久关闭: Vim /etc/sysconfig/selinux 设置为disabled Yum install httpd-manual 安装httpd手册 ip/manual即可访问 全局配置: 主服务器段配置(或者虚拟主机配置,二者生效一个): 全局配置: Listen 80  //可以监听多个端口 KeepAlive //是否保持连接 #MPM工作模式配置:默认是prefork <IfModule pre

Java中的Filter详解 --基础篇

Filter是Servlet规范中的一个高级特性,和Servlet不同的是,他们不处理客户端请求,只用于对request,response进行修改: 如果要自己实现一个自定义的Filter必须实现javax.servlet.Filter接口,接口中有三个方法: package javax.servlet; import java.io.IOException; /** * A filter is an object that performs filtering tasks on either