Node.js进行http/https请求和下载的实现实例

 更新时间:2025年09月11日 11:06:40   作者:卿·静  
本文将介绍使用使用 Node.js 的 https 模块和 fs 模块实现了三个 HTTP 请求的功能,分别展示了如何通过 HTTPS 发起 GET 请求获取 JSON 数据、发送带有请求头的 POST 请求,以及下载图片并保存到本地,

本文将介绍如何使用使用 Node.js 的 https 模块和 fs 模块实现了三个 HTTP 请求的功能。分别展示了如何通过 HTTPS 发起 GET 请求获取 JSON 数据、发送带有请求头的 POST 请求,以及下载图片并保存到本地。以下是对每个部分的详细说明。

1. 引入必要的模块

const http = require("http");   // 用于发起HTTP请求
const https = require("https"); // 用于发起HTTPS请求
const fs = require("fs");       // 用于文件操作(如保存图片)
  • http模块:Node.js内置的一个核心模块,可用于创建HTTP服务器或发起HTTP客户端请求。
  • https模块:这是Node.js内置的模块,专门用于处理HTTPS协议的网络请求。与http模块相比,https模块支持SSL/TLS加密,确保数据传输的安全性。
  • fs模块:用于文件系统的操作,例如创建文件流以保存下载的图片。

下面的代码例子将使用 https 模块发送请求,如需发送 http 请求,可将代码中的 https 换成 http。

2. GET请求获取JSON数据

功能描述

通过HTTPS发起一个GET请求,从jsonplaceholder.typicode.com/posts/5获取指定ID的文章数据,并将返回的JSON数据解析后输出到控制台。

核心代码分析

const get_options = {
  hostname: "jsonplaceholder.typicode.com", // 目标服务器域名
  port: 443, // HTTPS 默认端口号为443  HTTP默认端口号为80
  path: "/posts/5", // 请求路径,获取 ID 为 5 的文章
  method: "GET", // 请求方法
};

//创建请求
const get_req = https.request(get_options, (res) => {
  let data = "";

  res.on("data", (chunk) => {
    data += chunk; // 将响应数据片段拼接到变量中
  });

  res.on("end", () => {
    const jsonData = JSON.parse(data); // 解析 JSON 数据
    console.log(jsonData); // 输出解析后的 JSON 对象
  });
});

get_req.on("error", (error) => {
  console.error(`Problem with request: ${error.message}`); // 处理请求错误
});

get_req.end(); // 发送请求

参数说明

  • hostname: 指定目标服务器的域名,这里是jsonplaceholder.typicode.com。
  • port: HTTPS 协议默认使用的端口是443。
  • path: 请求的具体路径,/posts/5表示获取ID为5的文章。
  • method: 请求方法,这里使用GET。
  • https.request: 创建一个HTTPS请求对象。
  • res.on('data', callback): 监听响应数据流,每次接收到数据片段时触发回调函数。
  • res.on('end', callback): 当所有数据接收完毕时触发回调函数。
  • JSON.parse(data): 将接收到的字符串形式的JSON数据解析为JavaScript对象。
  • get_req.end(): 发送请求, Node.js会开始监听服务器的响应,并依次触发data、end等事件。

3. POST请求发送JSON数据

功能描述

构造一个POST请求,向jsonplaceholder.typicode.com/posts发送JSON数据。展示了如何设置请求头(如Content-TypeContent-Length),并将JSON数据作为请求体发送。

核心代码分析

const post_options = {
  hostname: "jsonplaceholder.typicode.com",
  port: 443,
  path: "/posts",
  method: "POST",
  Headers: { // 设置请求头
    "Content-Type": "application/json", // 指定请求体类型为 JSON
    "Content-Length": Buffer.byteLength(
      JSON.stringify({
        userId: 1,
        title: "hello world",
        body: "你好",
      })
    ),
  },
};

const post_req = https.request(post_options, (res) => {
  let data = "";

  res.on("data", (chunk) => {
    data += chunk;
  });

  res.on("end", () => {
    const jsonData = JSON.parse(data);
    console.log(jsonData);
  });
});

post_req.on("error", (error) => {
  console.error(`Problem with request: ${error.message}`);
});

post_req.end();

参数说明

  • Headers: 设置请求头信息。
    • Content-Type: 指定请求体的MIME类型为application/json。
    • Content-Length: 指定请求体的字节长度,使用Buffer.byteLength计算。
  • JSON.stringify: 将JavaScript对象序列化为JSON字符串。
  • Buffer.byteLength: 计算字符串的字节长度。

4. 下载图片并保存到本地

功能描述

通过HTTPS发起一个GET请求,从cdn2.thecatapi.com/images/2OKotXbFe.jpg下载一张猫的图片,并将其保存到本地文件系统。

核心代码分析

const img_options = {
  hostname: "cdn2.thecatapi.com",
  port: 443,
  path: "/images/2OKotXbFe.jpg",
  method: "GET",
};

const img_req = https
  .request(img_options, (res) => {
    if (res.statusCode !== 200) {
      console.error(`Failed to fetch image, status code: ${res.statusCode}`);
      res.resume(); // 消耗响应数据以释放内存
      return;
    }

    const filePath = "./cat_image.jpg";
    const fileStream = fs.createWriteStream(filePath);

    res.pipe(fileStream);

    fileStream.on("finish", () => {
      fileStream.close(() => {
        console.log("Image saved successfully.");
      });
    });
  })
  .on("error", (err) => {
    console.error(`Error downloading image: ${err.message}`);
  });

img_req.end();
参数说明
  • hostname: 图片服务器的域名,这里是cdn2.thecatapi.com。
  • path: 图片资源的路径,/images/2OKotXbFe.jpg。
  • fs.createWriteStream(filePath): 创建一个可写流,用于将图片数据保存到本地文件。
  • res.pipe(fileStream): 将响应数据管道传输到文件流中。
  • fileStream.on('finish', callback): 当文件写入完成时触发回调函数。
  • fileStream.close(callback): 关闭可写流,并触发回调函数。
  • res.resume(): 如果状态码不是200,消耗掉响应数据以释放内存。

总结

本文详细介绍了如何使用Node.js的https模块发起不同类型的HTTP请求,并通过一个完整代码示例展示了如何实现以下功能:

  1. 使用GET请求获取JSON数据。
  2. 构造POST请求发送JSON数据。
  3. 下载图片并保存到本地。

通过这些示例,读者可以掌握https模块的基本用法,并能够根据实际需求扩展功能。无论是开发RESTful API客户端还是实现文件下载工具,https模块都是不可或缺的重要工具。

到此这篇关于Node.js进行http/https请求和下载的实现实例的文章就介绍到这了,更多相关Node.js http/https请求和下载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 教你在heroku云平台上部署Node.js应用

    教你在heroku云平台上部署Node.js应用

    heroku是构建在AWS之上的一个PaaS云平台,现在支持Ruby, Node.js, Python, Java, 和 PHP,代码的部署是通过git进行,编译和运行都是自动的。
    2014-07-07
  • 一文详解如何使用node执行js文件

    一文详解如何使用node执行js文件

    Node.js开发者过去通常将大多数可执行命令发布为全局的软件包,以使它们处于路径中且可被立即地执行,下面这篇文章主要给大家介绍了关于如何使用node执行js文件的相关资料,需要的朋友可以参考下
    2023-01-01
  • NodeJS连接MySQL数据库并进行增删改查操作详解

    NodeJS连接MySQL数据库并进行增删改查操作详解

    本篇是使用NodeJS的模块MySQL操作MySQL数据库的基础教程,连接MySQL数据库并进行增删改查操作详解,需要的朋友可以参考下
    2024-02-02
  • Windows下安装Bun像Node或Deno的现代JS运行时

    Windows下安装Bun像Node或Deno的现代JS运行时

    这篇文章主要为大家介绍了一款像Node或Deno的现代JavaScript运行时的bun在Windows下安装过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • node.js中的http.response.end方法使用说明

    node.js中的http.response.end方法使用说明

    这篇文章主要介绍了node.js中的http.response.end方法使用说明,本文介绍了http.response.end的方法说明、语法、接收参数、使用实例和实现源码,需要的朋友可以参考下
    2014-12-12
  • Nodejs中的this详解

    Nodejs中的this详解

    本文给大家汇总介绍了下nodejs中的this,nodejs中的this和在浏览器中javascript中的this还是有很大的差异的,小伙伴们可以研究下
    2016-03-03
  • Node.js高级编程cluster环境及源码调试详解

    Node.js高级编程cluster环境及源码调试详解

    这篇文章主要为大家介绍了Node.js高级编程cluster环境及源码调试详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Nodejs异步回调的优雅处理方法

    Nodejs异步回调的优雅处理方法

    这篇文章主要介绍了Nodejs异步回调的优雅处理方法,本文使用了ES6中的新特性,用一种十分优雅的方式解决了回调问题,需要的朋友可以参考下
    2014-09-09
  • koa2服务配置SSL的实现方法

    koa2服务配置SSL的实现方法

    这篇文章主要介绍了koa2服务配置SSL的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • Node.js读写文件之批量替换图片的实现方法

    Node.js读写文件之批量替换图片的实现方法

    下面小编就为大家带来一篇Node.js读写文件之批量替换图片的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09

最新评论