首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Request请求库被废弃了! 我们该用什么替代?

Request请求库被废弃了! 我们该用什么替代?

作者头像
治电小白菜
发布于 2020-08-25 07:56:45
发布于 2020-08-25 07:56:45
3K00
代码可运行
举报
文章被收录于专栏:技术综合技术综合
运行总次数:0
代码可运行

可以看到, Request 在 2020.2.11 就被废弃了, 几乎接触过Node的人都接触过Request, 通过看到一个个库的废弃, 停止支持以及转手, 我们可以看到开源事业的艰辛

image.png

当然, 既然Request废弃了, 我们也得继续找个靠谱的请求库啦! 那就是got

GOT

性能对比

下图时官方文档中将 gotrequest, node-fetch, ky, axios, superagent这几个常用的HTTP请求库功能上的对比, 可以看到got的功能还算全面, 虽然不支持浏览器端使用...

性能

迁移指南

从其他HTTP请求库迁移到Got

从 Request 迁移

你可能觉得迁移会很麻烦, 但是并不是. ?

让我们从Request的文档中拿出第一个例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const request = require('request');

request('https://google.com', (error, response, body) => {
    console.log('error:', error);
    console.log('statusCode:', response && response.statusCode);
    console.log('body:', body);
});

使用GOT, 可以这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const got = require('got');

(async () => {
    try {
        const response = await got('https://google.com');
        console.log('statusCode:', response.statusCode);
        console.log('body:', response.body);
    } catch (error) {
        console.log('error:', error);
    }
})();

看起来很棒, 是不是? ?

常用选项

Request 和 Got 都支持 http.request 的选项.

这些 Got 选项和 Request 的一样:

所以如果你很熟悉他们, 你可以很好的上手.

哦, 还有一件事... 没有time 选项. 假设 这是对的.

重命名的选项

可读性对于我们来说很重要, 所以我们给这些选项重新命名:

更清楚了, 不是吗?

行为改变

timeout 选项 有了一些额外的功能. 你可以查看 设置特定事件超时!

searchParams 选项 总是使用 URLSearchParams 除非它是字符串string.

使用streams的话, 只需要 调用got.stream(url, options) 或者 got(url, {isStream: true, ...}).

重大变化
  • json 选项不是boolean类型, 而是 Object类型. 他将被序列化并当作body使用.
  • form 选项是 Object类型. 他可以是一个普通对象或者一个form-data 实例.
  • 没有 oauth/hawk/aws/httpSignature 选项. 标记请求, 你需要创建一个自定义实例.
  • 没有 agentClass/agentOptions/pool 选项.
  • 没有 forever 选项. 你需要使用forever-agent.
  • 没有proxy 选项. 你需要使用pass a custom agent.
  • 没有 auth 选项. 你需要使用 username / password 代替.
  • 没有 baseUrl 选项. 使用 prefixUrl代替, 如果不存在就用斜杠代替. 除非URL是一个实例, 否则它将始终是前置.
  • 没有 removeRefererHeader 选项. 你可以移除 referer 头 在beforeRequest 钩子里:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const gotInstance = got.extend({
    hooks: {
        beforeRequest: [
            options => {
                delete options.headers.referer;
            }
        ]
    }
});

gotInstance(url, options);
  • 没有 jsonReviver/jsonReplacer选项, 但是你可以使用钩子来解决:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const gotInstance = got.extend({
    hooks: {
        init: [
            options => {
                if (options.jsonReplacer && options.json) {
                    options.body = JSON.stringify(options.json, options.jsonReplacer);
                    delete options.json;
                }
            }
        ],
        beforeRequest: [
            options => {
                if (options.responseType === 'json' && options.jsonReviver) {
                    options.responseType = 'text';
                    options.customJsonResponse = true;
                }
            }
        ],
        afterResponse: [
            response => {
                const {options} = response.request;
                if (options.jsonReviver && options.customJsonResponse) {
                    response.body = JSON.parse(response.body, options.jsonReviver);
                }

                return response;
            }
        ]
    }
});

gotInstance(url, options);

钩子是非常有用的, 不是吗? 查看更多 看看钩子还能实现什么.

关于流的更多信息

让我们快速看下 Request 的文档中的另一个示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http.createServer((request, response) => {
    if (request.url === '/doodle.png') {
        request.pipe(request('https://example.com/doodle.png')).pipe(response);
    }
});

很酷的功能是, Request 可以代理请求头和流, 当然Got也能做到:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
const stream = require('stream');
const {promisify} = require('util');
const got = require('got');

const pipeline = promisify(stream.pipeline);

http.createServer(async (request, response) => {
    if (request.url === '/doodle.png') {
        // 当有人向我们的服务器发出请求时,我们会收到一个body和一些请求头.
        // 这些被传递给Got. 代理将会将数据下载到我们服务器,
        // 所以你不必使用`response.writeHead(statusCode, headers)` 和 `response.end(body)`.
        // 这些将自动完成.
        await pipeline(
            got.stream('https://example.com/doodle.png'),
            response
        );
    }
});

一切都没有真正改变. 只是记得使用 got.stream(url, options) 或者 got(url, {isStream: true, …}). 仅此而已!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【文本信息抽取与结构化】详聊如何用BERT实现关系抽取
常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式。这一点在知识图谱、信息抽取、文本摘要这些任务中格外明显。不同的任务的差异在于目标的转化形式不一样,因而不同的任务难度、处理方式存在差异。
用户1508658
2020/03/17
3.5K0
【文本信息抽取与结构化】详聊如何用BERT实现关系抽取
NAACL'22 | 华为提出中文NER领域最新SOTA
每天给你送来NLP技术干货! ---- 来自:克鲁斯卡 Delving Deep into Regularity: A Simple but Effective Method for Chinese Named Entity Recognition Accepted at NAACL 2022 Findings 4月7日,NAACL 2022公布论文入选名单,由华为云语音语义创新Lab多名研究者撰写的论文被NAACL 2022 Findings接收,趁热和大家一起学习一下 文章大纲 Abstract
zenRRan
2022/09/14
2.3K0
NAACL'22 | 华为提出中文NER领域最新SOTA
知识图谱构建-关系抽取和属性抽取
医疗知识图谱构建离不开大量的三元组,而三元组的获取除了先前文章介绍的IS-A上下位抽取,另一项就是关系抽取。关系抽取是信息抽取领域中的重要任务之一,目的在于抽取文本中的实体对,以及识别实体对之间的语义关系。例如"弥漫性肺泡出血易合并肺部感染"中,"弥漫性肺泡出血"与"肺部感染"都是疾病,他们之间的关系是"疾病-合并症"。存在于海量医疗文本中的知识体系网络,可以为其他NLP技术(实体链接,query 解析,问答系统,信息检索等)提供可解释性的先验知识(知识表示)和推理。
zenRRan
2020/03/03
7.8K0
【NLP】 深入浅出解析BERT原理及其表征的内容
本篇介绍目前NLP领域里影响力最大的预训练模型BERT。首先,大致介绍了BERT里有什么;接着,介绍了BERT的结构和其预训练的方式;最后,再总结BERT的表征的内容和分布。
用户1508658
2019/08/09
3.8K0
【NLP】 深入浅出解析BERT原理及其表征的内容
【信息抽取】NLP中关系抽取的概念,发展及其展望
事物、概念之间的关系是人类知识中非常重要的一个部分,但是他们通常隐藏在海量的非结构文本中。为了从文本中抽取这些关系事实,从早期的模式匹配到近年的神经网络,大量的研究在多年前就已经展开。
用户1508658
2020/07/01
1.2K0
【信息抽取】NLP中关系抽取的概念,发展及其展望
AAAI 2022 | 基于词对关系建模的统一NER,刷爆14个中英NER数据集
来源:PaperWeekly本文约2600字,建议阅读9分钟本文提出了一个统一命名实体识别框架,通过对词与词之间的关系进行分类的方式同时解决三种命名实体识别子任务。 引言 本研究重新审视了统一命名实体识别中的核心问题,即词与词之间的关系建模,并提出将所有类型的命名实体识别统一采用一种词对关系分类的方法进行建模。所提出的系统广泛地在 14 个命名实体识别数据集刷新了最好的分数。 论文题目: 基于词对关系建模的统一命名实体识别系统 Unified Named Entity Recognition as Wo
数据派THU
2022/05/12
1.3K0
AAAI 2022 | 基于词对关系建模的统一NER,刷爆14个中英NER数据集
【技术白皮书】第三章 - 2 :关系抽取的方法
由于传统机器学习的关系抽取方法选择的特征向量依赖于人工完成,也需要大量领域专业知识,而深度学习的关系抽取方法通过训练大量数据自动获得模型,不需要人工提取特征。2006年Hinton 等人(《Reducing the dimensionality of data with neural networks》)首次正式提出深度学习的概念。深度学习经过多年的发展,逐渐被研究者应用在实体关系抽取方面。目前,研究者大多对基于有监督和远程监督2种深度学习的关系抽取方法进行深入研究。此外,预训练模型Bert(bidirectional encoder representation from transformers)自2018年提出以来就备受关注,广泛应用于命名实体识别、关系抽取等多个领域。
合合技术团队
2022/08/23
2.2K0
【信息抽取】如何使用卷积神经网络进行关系抽取
事物、概念之间的关系是人类知识中非常重要的一个部分,但是他们通常隐藏在海量的非结构文本中。为了从文本中抽取这些关系事实,从早期的模式匹配到近年的神经网络,大量的研究在多年前就已经展开。
用户1508658
2020/07/14
1.1K0
【信息抽取】如何使用卷积神经网络进行关系抽取
使用transformer BERT预训练模型进行文本分类 及Fine-tuning
Bert 全称为 Bidirectional Encoder Representations from Transformers(Bert)。和 ELMo 不同,BERT 通过在所有层联合调节左右两个上下文来预训练深层双向表示,此外还通过组装长句作为输入增强了对长程语义的理解。Bert 可以被微调以广泛用于各类任务,仅需额外添加一个输出层,无需进行针对任务的模型结构调整,就在文本分类,语义理解等一些任务上取得了 state-of-the-art 的成绩。
大鹅
2021/07/30
11.9K0
站在BERT肩膀上的NLP新秀们(PART I)
去年NLP领域最火的莫过于BERT了,得益于数据规模和计算力的提升,BERT在大会规模语料上预训练(Masked Language Model + Next Sentence Prediction)之后可以很好地从训练语料中捕获丰富的语义信息,对各项任务疯狂屠榜。
zenRRan
2019/06/21
8490
站在BERT肩膀上的NLP新秀们(PART I)
从Word Embedding到Bert模型——自然语言处理预训练技术发展史
作者简介:张俊林,中国中文信息学会理事,目前在新浪微博 AI Lab 担任资深算法专家。在此之前,张俊林曾经在阿里巴巴任资深技术专家,以及在百度和用友担任技术经理及技术总监等职务。同时他是技术书籍《这就是搜索引擎:核心技术详解》(该书荣获全国第十二届输出版优秀图书奖)、《大数据日知录:架构与算法》的作者。
zenRRan
2018/12/17
1.5K0
OCR 【技术白皮书】第一章:OCR智能文字识别新发展——深度学习的文本信息抽取
信息抽取 (Information Extraction) 是把原始数据中包含的信息进行结构化处理,变成表格一样的组织形式。输入信息抽取系统的是原始数据,输出的是固定格式的信息点,即从原始数据当中抽取有用的信息。信息抽取的主要任务是将各种各样的信息点从原始数据中抽取出来。然后以统一的形式集成在一起,方便后序的检索和比较。由于能从自然语言中抽取出信息框架和用户感兴趣的事实信息,无论是在信息检索、问答系统还是在情感分析、文本挖掘中,信息抽取都有广泛应用。随着深度学习在自然语言处理领域的很多方向取得了巨大成功,循环神经网络(RNN)和卷积神经网络(CNN)也被用于信息抽取研究领域,基于深度学习的信息抽取技术也应运而生。
合合技术团队
2022/08/15
1.3K0
OCR 【技术白皮书】第一章:OCR智能文字识别新发展——深度学习的文本信息抽取
奇点已过?聊聊BERT之后的NLP时代
本文作者 吴金龙,爱因互动技术合伙人,算法负责人。本文转自知乎专栏“智能对话机器人技术”,欢迎大家关注。
AI研习社
2019/06/14
8760
奇点已过?聊聊BERT之后的NLP时代
利用BERT和spacy3联合训练实体提取器和关系抽取器
NLP技术最有用的应用之一是从非结构化文本(合同、财务文档、医疗记录等)中提取信息,这使得自动数据查询能够有用武之地。
磐创AI
2021/08/05
3.2K0
利用BERT和spacy3联合训练实体提取器和关系抽取器
基于Bert-NER构建特定领域中文信息抽取框架
本文通过多个实验的对比发现,结合Bert-NER和特定的分词、词性标注等中文语言处理方式,获得更高的准确率和更好的效果,能在特定领域的中文信息抽取任务中取得优异的效果。
机器学习AI算法工程
2020/03/26
2.9K0
NLP之从word2vec到ELMO GPT再到BERT与attention transformer过程笔记与详解
在NLP自然语言处理学习或者发展过程中,在13年word2vec word embedding后,人们发现一个单词通过Word Embedding表示,很容易找到语义相近的单词,但单一词向量表示,不可避免一词多义问题。于是迎来Google的ELMO transformer BERT等动态表征模型,BERT模型更是刷新了GLUE benchmark的11项测试任务最高记录。
大鹅
2021/02/21
3.5K0
使用transformer BERT预训练模型进行文本分类 及Fine-tuning
Bert 全称为 Bidirectional Encoder Representations from Transformers(Bert)。和 ELMo 不同,BERT 通过在所有层联合调节左右两个上下文来预训练深层双向表示,此外还通过组装长句作为输入增强了对长程语义的理解。Bert 可以被微调以广泛用于各类任务,仅需额外添加一个输出层,无需进行针对任务的模型结构调整,就在文本分类,语义理解等一些任务上取得了 state-of-the-art 的成绩。
大鹅
2021/07/30
4.6K0
Bert时代的创新:Bert在NLP各领域的应用进展
Bert 给人们带来了大惊喜,不过转眼过去大约半年时间了,这半年来,陆续出现了与 Bert 相关的不少新工作。
机器之心
2019/06/14
1.6K0
Bert时代的创新:Bert在NLP各领域的应用进展
芝麻街跨界NLP,没有一个ERNIE是无辜的
之前发在知乎、AINLP以及CSDN上的预训练模型系列文章,最近打算整理到公号上。另外欢迎大家左下角阅读原文关注我的知乎专栏:【BERT巨人肩膀】
NewBeeNLP
2020/08/26
1.8K0
芝麻街跨界NLP,没有一个ERNIE是无辜的
【文本信息抽取与结构化】深入了解关系抽取你需要知道的东西
常常在想,自然语言处理到底在做的是一件什么样的事情?到目前为止,我所接触到的NLP其实都是在做一件事情,即将自然语言转化为一种计算机能够理解的形式。这一点在知识图谱、信息抽取、文本摘要这些任务中格外明显。不同的任务的差异在于目标的转化形式不一样,因而不同的任务难度、处理方式存在差异。
用户1508658
2020/02/27
1.5K0
【文本信息抽取与结构化】深入了解关系抽取你需要知道的东西
推荐阅读
相关推荐
【文本信息抽取与结构化】详聊如何用BERT实现关系抽取
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档