首页 >web前端 >js教程 >如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求?

如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求?

Susan Sarandon
Susan Sarandon原创
2025-01-20 10:32:11895浏览

如何使用 Node-Fetch API 在 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中发出 HTTP 请求

我们当前的网站通常依赖于数十种不同的资源,例如图像、CSS、字体、JavaScript、JSON 数据等的整体集合。然而,世界上第一个网站仅用 HTML 编写。

JavaScript作为一种优秀的客户端脚本语言,在网站的发展过程中发挥了重要的作用。借助 XMLHttpRequest 或 XHR 对象,JavaScript 可以实现客户端和服务器之间的通信,而无需重新加载页面。

然而,这个动态过程受到了 Fetch API 的挑战。什么是获取 API?如何在 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中使用 Fetch API?为什么 Fetch API 是更好的选择?

现在就开始从本文中获取答案!

如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中的 HTTP 请求是什么?

在 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中,HTTP 请求是构建 Web 应用程序或与 Web 服务交互的基本部分。它们允许客户端(如浏览器或其他应用程序)向服务器发送数据,或从服务器请求数据。这些请求使用超文本传输​​协议 (HTTP),它是网络数据通信的基础。

  1. HTTP 请求:HTTP 请求由客户端发送到服务器,通常用于检索数据(如网页或 API 响应)或向服务器发送数据(如提交表单)。
  2. HTTP 方法:HTTP 请求通常包含一个方法,该方法指示客户端希望服务器执行什么操作。常见的 HTTP 方法包括:
    • GET:向服务器请求数据。
    • POST:将数据发送到服务器(例如,提交表单)。
    • PUT:更新服务器上的现有数据。
    • 删除:从服务器中删除数据。
  3. 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? HTTP 模块:如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 提供了内置的 http 模块来处理 HTTP 请求。该模块使您能够创建 HTTP 服务器、侦听请求并响应它们。

为什么 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 是网络抓取和自动化的理想选择?

如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 凭借其独特的特性、强大的生态系统以及异步、非阻塞架构,已成为网页抓取和自动化任务的首选技术之一。

为什么 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 是网络抓取和自动化的理想选择?让我们来弄清楚它们吧!

  1. 异步和非阻塞 I/O
  2. 速度和效率
  3. 丰富的库和框架生态系统
  4. 使用无头浏览器处理动态内容
  5. 跨平台兼容性
  6. 实时数据处理
  7. 简单语法,快速开发
  8. 支持代理轮换和反检测

什么是 Node-Fetch API?

Node-fetch 是一个轻量级模块,它将 Fetch API 引入 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 环境。它简化了发出 HTTP 请求和处理响应的过程。

Fetch API 围绕 Promises 构建,非常适合异步操作,例如从网站抓取数据、与 RESTful API 交互或自动化任务。

如何在 Node.JS 中使用 Fetch API?

Fetch API 是一个基于 Promise 的现代接口,与传统的 XMLHttpRequest 对象相比,旨在以更高效、更灵活的方式处理网络请求。

当代浏览器原生支持它,这意味着不需要额外的库或插件。在本指南中,我们将探讨如何利用 Fetch API 执行 GET 和 POST 请求,以及如何有效管理响应和错误。

注意:如果您的计算机上没有安装 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求?,您需要先安装它。您可以在这里下载适合您操作系统的如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求?安装包。推荐的 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 版本为 18 及以上。

步骤 1. 初始化您的 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 项目

如果您还没有创建项目,可以使用以下命令创建一个新项目:

mkdir fetch-api-tutorial
cd fetch-api-tutorial
npm init -y

打开package.json文件,添加type字段,并将其设置为module:

{
  "name": "fetch-api-tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

步骤2.下载并安装node-fetch库

这是一个在 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中使用 Fetch API 的库。您可以使用以下命令安装node-fetch库:

npm install node-fetch

下载完成后,我们就可以开始使用Fetch API发送网络请求了。在项目根目录下新建文件index.js,添加以下代码:

import fetch from 'node-fetch';

fetch('https://jsonplaceholder.typicode.com/posts')
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

执行以下命令运行代码:

node index.js

我们将看到以下输出:

如何使用 Node-Fetch API 在 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中发出 HTTP 请求?

步骤3.使用Fetch API发送POST请求

如何使用Fetch API发送POST请求?请参考以下方法。在项目根目录下新建文件post.js,添加以下代码:

import fetch from 'node-fetch';

const postData = {
  title: 'foo',
  body: 'bar',
  userId: 1,
};

fetch('https://jsonplaceholder.typicode.com/posts', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(postData),
})
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error(error));

我们来分析一下这段代码:

  • 我们首先定义一个名为 postData 的对象,其中包含我们要发送的数据。
  • 然后我们使用 fetch 函数向 https://jsonplaceholder.typicode.com/posts 发送 POST 请求,并传递一个配置对象作为第二个参数。
  • 配置对象包含请求方法、请求标头和请求正文。

执行以下命令运行代码:

mkdir fetch-api-tutorial
cd fetch-api-tutorial
npm init -y

您可以看到的输出:

如何使用 Node-Fetch API 在 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中发出 HTTP 请求?

步骤 4. 处理 Fetch API 响应结果和错误

我们需要在项目根目录下新建一个文件response.js,并添加以下代码:

{
  "name": "fetch-api-tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

在上面的代码中,我们首先填写了错误的URL地址来触发HTTP错误。然后我们在 then 方法中检查结果响应的状态码,如果状态码不是 200 则抛出错误。最后,我们在 catch 方法中捕获错误并打印出来。

执行以下命令运行代码:

npm install node-fetch

代码执行后,您将看到以下输出:

如何使用 Node-Fetch API 在 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中发出 HTTP 请求?

网页抓取中的 3 个常见挑战

1. 验证码

CAPTCHA(区分计算机和人类的完全自动化公共图灵测试)旨在防止网络抓取工具等自动化系统访问网站。它们通常要求用户通过解决谜题、识别图像中的物体或输入扭曲的字符来证明自己是人类。

2. 动态内容

许多现代网站使用 React、Angular 或 Vue.js 等 JavaScript 框架来动态加载内容。这意味着您在浏览器中看到的内容通常是在页面加载后呈现的,因此很难使用依赖静态 HTML 的传统方法进行抓取。

3.IP封禁

网站通常会采取措施来检测和阻止抓取活动,最常见的方法之一是 IP 阻止。当短时间内从同一 IP 地址发送太多请求时,就会发生这种情况,导致网站标记并阻止该 IP。

Scrapeless 刮擦工具包 - 高效刮擦工具

Scrapeless 是最好的综合抓取工具之一,因为它能够实时绕过网站封锁,包括 IP 封锁、CAPTCHA 挑战和 JavaScript 渲染。它支持 IP 轮换、TLS 指纹管理和验证码解决等高级功能,非常适合大规模网页抓取。

Scrapeless 如何增强 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 网页抓取项目?

它与 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 的轻松集成和避免检测的高成功率使 Scrapeless 成为绕过现代反机器人防御的可靠且高效的选择,确保抓取操作顺利且不间断。

使用 Scrapeless 等抓取工具包相对于手动抓取的优势

  1. 高效处理网站屏蔽:Scrapeless 可以实时绕过常见的反抓取防御,例如 IP 屏蔽、验证码和 JavaScript 渲染,而手动抓取无法有效处理这些防御。
  2. 可靠性和成功率:Scrapeless 使用 IP 轮换和 TLS 指纹管理等高级功能来避免检测,与手动抓取相比,确保更高的成功率和不间断的抓取。
  3. 轻松集成和自动化:与 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 无缝集成,并自动化整个抓取工作流程,与手动数据收集相比,节省时间并减少人为错误。

只需遵循一些简单的步骤,您就可以将 Scrapeless 集成到您的 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 项目中。

是时候继续滚动了!下面将会更加精彩!

将 Scrapeless Scraping 工具包集成到您的 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 项目中

开始之前,您需要注册一个Scrapeless帐户

步骤 1. 在 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中访问 Scrapeless Scraping API

我们需要进入 Scrapeless Dashboard,点击左侧的“Scraping API”菜单,然后选择您要使用的服务。

这里我们可以使用“亚马逊”服务

Amazon api

进入Amazon API页面,我们可以看到Scrapeless为我们提供了三种语言的默认参数和代码示例:

  • Python
  • 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求?

这里我们选择 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 并将代码示例复制到我们的项目中:

如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求?

Scrapeless 的 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 代码示例默认使用 http 模块。我们可以使用node-fetch模块来替代http模块,这样我们就可以使用Fetch API来发送网络请求了。

首先在我们的项目中创建一个 scraping-api-amazon.js 文件,然后将 Scrapeless 提供的代码示例替换为以下代码示例:

mkdir fetch-api-tutorial
cd fetch-api-tutorial
npm init -y

通过执行以下命令来运行代码:

{
  "name": "fetch-api-tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

我们将看到 Scrapeless API 返回的结果。这里我们只是将它们打印出来。您可以根据需要对返回结果进行处理。

returned results

步骤 2. 利用 Web Unlocker 绕过常见的反抓取措施

Scrapeless提供了Web解锁器服务,可以帮助您绕过常见的反抓取措施,如验证码绕过、IP封禁等。Web解锁器服务可以帮助您解决一些常见的爬取问题,让您的爬行任务更加顺利。

为了验证Web解锁服务的有效性,我们可以先使用curl命令访问需要验证码的网站,然后使用Scrapeless Web解锁服务访问同一网站,看看验证码是否能够成功绕过。

  1. 使用curl命令访问需要验证码的网站,如https://identity.getpostman.com/login:
mkdir fetch-api-tutorial
cd fetch-api-tutorial
npm init -y

通过查看返回结果,可以看到该网站已接入Cloudflare验证机制,需要输入验证码才能继续访问该网站。

Cloudflare verification mechanism

  1. 我们使用Scrapeless Web解锁服务来访问同一网站:
  2. 转到无刮擦仪表板
  3. 单击左侧的 Web 解锁器菜单

Click the Web unlocker

  • 将 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 代码示例复制到我们的项目

在这里我们创建一个新的 web-unlocker.js 文件。我们仍然需要使用node-fetch模块来发送网络请求,所以我们需要将Scrapeless提供的代码示例中的http模块替换为node-fetch模块:

{
  "name": "fetch-api-tutorial",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

执行以下命令来运行脚本:

npm install node-fetch

run the script

Scrapeless Web unlocker successfully bypassed CAPTCHA

看! Scrapeless Web解锁器成功绕过验证码,我们可以看到返回结果中包含了我们需要的网页内容。

常见问题解答

Q1. Node-Fetch 与 Axios:哪个更适合网页抓取?

为了让您的选择更方便,Axios 和 Fetch API 有以下区别:

  1. Fetch API 使用请求的 body 属性,而 Axios 使用 data 属性。
  2. 使用 Axios 可以直接发送 JSON 数据,而 Fetch API 需要转换为字符串。
  3. axios可以直接处理JSON。 Fetch API 需要先调用response.json()方法来获取JSON格式的响应。
  4. 对于axios来说,响应数据变量名必须是data;对于 Fetch API,响应数据变量名称可以是任何内容。
  5. Axios 允许使用进度事件轻松监控和更新进度。 Fetch API 中没有直接的方法。
  6. Fetch API 不支持拦截器,而 Axios 支持。
  7. Fetch API 允许流式响应,而 Axios 则不允许。

Q2。节点获取稳定吗?

Node 最显着的特性。 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? v21 是 Fetch API 的稳定性。

Q3。 Fetch API 比 AJAX 更好吗?

对于新项目,建议使用 Fetch API,因为它具有现代功能且简单。但是,如果您需要支持非常旧的浏览器或维护遗留代码,Ajax 可能仍然是必要的。

底线

如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中添加 Fetch API 是一个期待已久的功能。在 如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求? 中使用 Fetch API 可以确保您的抓取工作轻松完成。但使用 Node Fetch API 时难免会遇到严重的网络阻塞

以上是如何使用 Node-Fetch API 在 Node.js 中发出 HTTP 请求?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn