http.ClientRequest
http.Client
的request()方法
建立并返回http.ClientRequest 对象
。
该对象代表一个进行中的请求(request),
该请求的消息头已经发送出去。
要获得回应,
可以为request 对象增加一个'response'事件的监听器。
response事件
将在request 对象接收到响应头的时候被触发,
response事件
的处理函数接收一个参数,
该参数是http.ClientResponse
的实例。
在response事件
中,
可以为response 对象
增加监听器,
监听data事件
尤为有用。
要记住,response事件
是在接收到回应信息体
之前被触发,
所以这里不需要担心信息体的第一部分不能被捕获。
只要在处理response事件
过 程中增加data事件监听器
,
信息体是肯定可以被捕获的。
// Good
request.on('response', function (response){
response.on('data', function (chunk){
console.log('BODY: ' + chunk);
});
});
// Bad - misses all or part of the body
request.on('response', function (response){
setTimeout(function (){
response.on('data', function (chunk){
console.log('BODY: ' + chunk);
});
}, 10);
});
这是一个可写流
如下是此对象可以触发的事件。
1. Event ‘response’
function (response) { }
在响应被接收后触发。
这个事件仅会被发出一次,
参数response
是http.ClientResponse
的实例。
request.write(chunk, encoding='utf8')
发送body 中的一块。
用户可以通过多次调用这个方法
将请求数据包通过流的方式发送到服务器。
在这个时候我 们建议使用在建立请求的时候把
['Transfer-Encoding', 'chunked']
放在请求头里。
参数'chunk'
应当是一个数字索引的数组或字符串。
参数’encoding’是可选的,仅在chunk 为字符串的时使用。
1. request.end([data], [encoding])
完成本次请求的发送。
☆ 1.
如果消息体中的任何一个部分没有来得及发送,
request.end
将把他们全部刷新到流中。
☆ 2
如果本次请求是分块的,
这个函数将发出结束字符'0\r\n\r\n'
。
如果使用参数data,就等于在调用request.write(data, encoding)之后紧接着调用request.end()。
http.ClientResponse
这个对象在使用http.Client
发起请求时被创建,
它会以参数的形式传递给request 对象'response'事件的响应函数
。 'response'实现了可读流的接口
。
1. Event: ‘data’
function (chunk) {}
当接收到消息体
一部分的时候触发。
例如:
此方法有一个参数,
是消息体的一个块,
这个块的内容已经被解码成一个字符串。
信息体的编码通过 response.setBodyEncoding()
来设置。
2. Event: ‘end’
function () {}
该事件对于每个受到的消息会触发一次。
它没有参数,
在触发过这个事件后将不会再触发其他事件将了。
response.statusCode
一个三位数字所表示的HTTP 回应状态,比如404。
1. response.httpVersion
所连接到的服务器所使用HTTP 协议版本。
大致上是’1.1’或者’1.0’。
response.httpVersionMajor
则表示第一个数字 response.httpVersionMinor
表示第二个。
2. response.headers
http 信息头对象。
3. response.setEncoding(encoding=’null’)
设置回应信息体的编码,
'utf8'、'ascii'或者'binary'
。
默认值为空,
这表示'data'
事件将会使用一个Buffer 对象
作为 参数。
4. response.pause()
暂停response 触发事件。通常在控制一个下载动作时候使用。
5. response.resume()
恢复一个暂停的请求。
6. response.client
保存response 所属的http.Client 的引用。
总结
http.ClientRequest
事件
1.response
方法
1.request.end([data], [encoding])
http.ClientResponse
事件
data
end
方法
1. response.httpVersion
2. response.headers
3. response.setEncoding(encoding=’null’)
4. response.pause()
5. response.resume()
6. response.client