在JavaScript生态中,知名度最高的HTTP Request Library库是axios。有众多插件的HTTP请求库是superagent。各类请求库功能大体相同,用法和用途存在一些差异。今天介绍的HTTP Request Client库则是request的替代品bent。
自2020年2月11日起,request已被弃用。具体原因请见:https://github.com/request/request/issues/3142。
Bent可以作为request在Node.js下简单高效的替代品。整个库只有三个文件,总代码不超过300行。
browser.js
core.js
nodejs.js
const bent = require('bent')
// 定义使用GET方式请求并解析返回的JSON数据为JavaScript对象
const get = bent('GET', 'json')
// 定义使用POST方式请求并返回文本
const post = bent('POST', 'string')
const obj = await get('https://api.wyr.me/')
const res = await post('http://todo.sercretcore.cn/ip.php')
const bent = require('bent')
// 定义使用GET方式请求并返回作为Buffer
const getBuffer = bent('buffer')
const buffer = await getBuffer('https://data.sercretcore.cn/new_avatar.jpeg')
// 将返回的buffer内容转换为Base64
console.log(buffer.toString('base64'))
上述示例中,返回的Base64不带图片类型,可以通过header中的content-type获得文件类型,或参考《JS推测Base64图片类型》。
const bent = require('bent')
// bent是一个返回异步函数的函数
const request = bent()
; (async () => {
const stream = await request('https://data.sercretcore.cn/new_avatar.jpeg')
console.log(stream.status) // 200
console.log(stream.statusCode) // 200
const fs = require('fs')
stream.pipe(fs.createWriteStream('avatar.jpeg'))
})()
上述示例中,我们将获取到的stream传输并保存到了文件中,相当于从URL下载一张图片并保存为文件。
Stream可以直接返回给客户端。
const bent = require('bent')
// bent是一个返回异步函数的函数
const request = bent()
; (async () => {
const http = require('http')
http.createServer(async function (req, res) {
if (req.method === 'GET') {
const stream = await request('https://data.sercretcore.cn/new_avatar.jpeg')
res.writeHead(stream.statusCode, {
"Content-type": stream.headers['content-type'],
'Content-Length': stream.headers['content-length']
})
stream.pipe(res)
}
}).listen(80)
})()
运行以上代码,访问http://localhost,浏览器将显示一张图片。
![]()
更多用法请访问:https://github.com/mikeal/bent
Axios非常适合Vue、React等前端框架。
superagent适合爬虫、监控、模拟测试等业务。
需要兼容较老的浏览器可以选择jQuery的ajax()方法。
在Node.js中,以上框架均可使用。由于目前Node.js对新版JS规范的支持较好,推荐简单高效的bent。
在JavaScript生态中,知名度最高的HTTP Request Library库是axios。有众多插件的HTTP请求库是superagent。各类请求库功能大体相同,用法和用途存在一些差异。今天介绍的HTTP Request Client库则是request的替代品bent。
自2020年2月11日起,request已被弃用。具体原因请见:https://github.com/request/request/issues/3142。
Bent可以作为request在Node.js下简单高效的替代品。整个库只有三个文件,总代码不超过300行。
browser.js
core.js
nodejs.js
const bent = require('bent')
// 定义使用GET方式请求并解析返回的JSON数据为JavaScript对象
const get = bent('GET', 'json')
// 定义使用POST方式请求并返回文本
const post = bent('POST', 'string')
const obj = await get('https://api.wyr.me/')
const res = await post('http://todo.sercretcore.cn/ip.php')
const bent = require('bent')
// 定义使用GET方式请求并返回作为Buffer
const getBuffer = bent('buffer')
const buffer = await getBuffer('https://data.sercretcore.cn/new_avatar.jpeg')
// 将返回的buffer内容转换为Base64
console.log(buffer.toString('base64'))
上述示例中,返回的Base64不带图片类型,可以通过header中的content-type获得文件类型,或参考《JS推测Base64图片类型》。
const bent = require('bent')
// bent是一个返回异步函数的函数
const request = bent()
; (async () => {
const stream = await request('https://data.sercretcore.cn/new_avatar.jpeg')
console.log(stream.status) // 200
console.log(stream.statusCode) // 200
const fs = require('fs')
stream.pipe(fs.createWriteStream('avatar.jpeg'))
})()
上述示例中,我们将获取到的stream传输并保存到了文件中,相当于从URL下载一张图片并保存为文件。
Stream可以直接返回给客户端。
const bent = require('bent')
// bent是一个返回异步函数的函数
const request = bent()
; (async () => {
const http = require('http')
http.createServer(async function (req, res) {
if (req.method === 'GET') {
const stream = await request('https://data.sercretcore.cn/new_avatar.jpeg')
res.writeHead(stream.statusCode, {
"Content-type": stream.headers['content-type'],
'Content-Length': stream.headers['content-length']
})
stream.pipe(res)
}
}).listen(80)
})()
运行以上代码,访问http://localhost,浏览器将显示一张图片。
![]()
更多用法请访问:https://github.com/mikeal/bent
Axios非常适合Vue、React等前端框架。
superagent适合爬虫、监控、模拟测试等业务。
需要兼容较老的浏览器可以选择jQuery的ajax()方法。
在Node.js中,以上框架均可使用。由于目前Node.js对新版JS规范的支持较好,推荐简单高效的bent。