详解node HTTP请求客户端 Request

2020-06-17 06:02:12易采站长站整理

Request是一个Node.jsNPM模块,它是一个HTTP客户端,使用简单功能确十分强大。我们可以用它来实现HTTP响应流的转接、模拟Form表单提交、支持HTTP认证、OAuth登录、自定义请求头等。下面我们来对这个模块做一个完整的介绍:

1. 安装及简单使用

安装request模块:


npm install request

Request设计为用最简单的方法发送HTTP请求,它还支持HTTPS请求和自动重定向跟踪:


var request = require('request');
request('http://www.baidu.com', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body) // IT笔录主页的HTML
}
})

引用request模块后,就可以能通过request()方法来发送HTTP请求,在不指定请求选项option时,默认为GET。在上面请求中,对URLhttp://www.baidu.com

会301重定向到http://www.baidu.com。而Request会自动跟踪URL重定向请求,默认支持10次重定向跟踪。

2. 流(stream)操作

Node.js原生HTTP模块实现了对HTTP请求和响应对象的流操作,Request同样支持基于流的操作。

如,可以将任何响应流通过pipe转接到一个文件流:


request(‘http://huoche.7234.cn/images/jb51/g5f3byy4ed2.png’).pipe(fs.createWriteStream(‘doodle.png’))

同样,可以将一个读取的文件流转接到PUT或POST请求中。这个方法会自动检查文件扩展名,并设置一个与文件扩展名对应的content-type(当该请求头未设置时):


fs.createReadStream(‘file.json’).pipe(request.put(‘http://mysite.com/obj.json’))

Request也支持pipe到它自己。这样操作时,content-type和content-length将被传递到其后的PUT请求中:


request.get(‘http://huoche.7234.cn/images/jb51/3odc0ujec1y.png’).pipe(request.put(‘http://mysite.com/img.png’))

与原生HTTP客户端一样,Request在收到请求响应时会发送一个’response’。事件回调函数中会包含一个response参数,它是一个http.IncomingMessage实例:


request
.get('http://huoche.7234.cn/images/jb51/3odc0ujec1y.png')
.on('response', function(response) {
console.log(response.statusCode) // 200
console.log(response.headers['content-type']) // 'image/png'
})
.pipe(request.put('http://mysite.com/img.png'))

当请求发生错误时,可以简单的通过监听error事件来处理:


request
.get('http://mysite.com/doodle.png')
.on('error', function(err) {
console.log(err)
})
.pipe(fs.createWriteStream('doodle.png'))

发挥一个想象: