为什么节点本机抓取中代理选项不可用?

问题描述 投票:0回答:2

我最近开始使用原生的fetch功能(节点17+)

今天我意识到它缺少

node-fetch
的一些功能,例如
agent

这是为什么?

有计划添加吗?

这是一种耻辱,因为我需要将

node-fetch
添加到我的项目中

看到

node.js fetch-api node-fetch
2个回答
8
投票

真正的答案是为什么您习惯的

http
模块中的选项不可用,也许令人惊讶的是,节点的内置
fetch()
全局不使用传统内置
http
/ 提供的 HTTP 堆栈
https
模块。

相反,它使用并行的、从头开始的 HTTP 堆栈重写,称为 undici

鉴于

fetch()
的 HTTP 堆栈与标准 HTTP 堆栈完全分离,因此您可以提供给
http.get
等人的选项不适用于
fetch()
也就不足为奇了。

undici 的文档可在此处获取。 http

Agent
被替换为
Dispatcher
。您可以将自定义
Dispatcher
传递给
fetch(…, { dispatcher })
,这样您就可以自定义
fetch
的 HTTP 行为。


1
投票

本机获取功能是实验性的,即尚未准备好用于生产,并且很可能存在问题。

https://nodejs.org/dist/latest-v18.x/docs/api/globals.html#fetch

jfriend00 的观点也非常有效:“将 fetch() 内置到 NodeJS 中的全部意义不就是它与浏览器中的 API 相同吗?”

© www.soinside.com 2019 - 2024. All rights reserved.