Node.js API实例讲解——创建http客户端
创建http客户端
有两种方式创建http客户端,http.request(options, callback) 和 http.get(options, callback) 。
http.request(options, callback)
options 可以是一个字符串或者是个json,字符串可以是一个有效网址,json内容就比较多了,看如下配置项。
host 域名或者ip地址,默认localhost
hostname 主机名称,这个设置优先于host
port 端口号,默认80
localAddress
method 请求方法名,GET/POST。默认是GET。
path 请求路径,默认“/”。
headers 请求头部。
auth 基本的身份验证,“名字:密码”。 下面举两个例子:
// 客户端 var http = require("http"); var req = http.request("http://www.google.com" ,function(res){ console.log(res.headers) }) req.end();
// 客户端 var http = require("http"); var req = http.request({host:"www.google.com"} ,function(res){ console.log(res.headers) }) req.end();
这里要说明的是,设置options时不会替换整个options,比如设置host只会设置这一个值,其他还保持其默认值。
一旦服务器端有响应了,那么callback会被调用,传入的res值是一个http.IncomingMessage对象,callback其实就是“response”事件监听器,这里的callback是可选参数。
方法会返回http.clientRequest对象。
http.get(options, callback)
这个方法是起到方便作用的,它无非就是设置 options.method = GET, 还会调用一下 req.end。 下面写两段代码,作用都是一样的。
var http = require("http"); var req = http.get("http://www.google.com" ,function(res){ console.log(res.headers) })
var http = require("http"); var req = http.request({host:"www.google.com"} ,function(res){ console.log(res.headers) }) req.end();
yellow通过http.request方法返回了一个http.ClientRequest对象,ClientRequest对象是stream.Writable子类。下面就对该对象进行详细讲解。god
"response"事件
当服务器有响应时会产生response事件。此事件的监听器会接收到一个响应对象,这个响应对象是一个http.IncomingMessage对象。http.request方法的第二个参数实际上就是这个事件的监听器。
var http = require("http"); var req = http.request({host:"www.google.com"}) req.on("response",function(res){ ... ... }) req.end();
"socket" 事件
请求对象建立好后,内部会创建一个net.Socket对象,然后会激发该事件,socket事件的监听器接收的参数就是该socket对象,该事件无论是否调用req.end()都会产生。
req.on("socket",function(socket){ ... })
"connect","upgrade"和"continue" 事件
参看“HTTP服务器”一节的connect,upgrade和continue事件部分,客户端通过connect,upgrade或continue方式访问服务器,如果收到服务器的回应,就会激发对应的事件。
req.on('connect', function(res, socket, head) { console.log('got connected!'); }
req.on('upgrade', function(res, socket, head) { console.log('got upgraded!'); }
req.on('continue',function(){ })
request.write(chunk, [encoding])
这个方法会发送一大块的数据chunk,chunk可以是Buffer或String类型,可多次调用这个方法,encoding[可选]参数,chunk是字符串时是通过这个参数进行编码后发送出去的,encoding默认是utf8。
request.end([data], [encoding])
这个方法的意思是完成请求的发送。
request.abort()
这个方法表示终止请求。