最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js進(jìn)行http/https請(qǐng)求和下載的實(shí)現(xiàn)實(shí)例

 更新時(shí)間:2025年09月11日 11:06:40   作者:卿·靜  
本文將介紹使用使用 Node.js 的 https 模塊和 fs 模塊實(shí)現(xiàn)了三個(gè) HTTP 請(qǐng)求的功能,分別展示了如何通過 HTTPS 發(fā)起 GET 請(qǐng)求獲取 JSON 數(shù)據(jù)、發(fā)送帶有請(qǐng)求頭的 POST 請(qǐng)求,以及下載圖片并保存到本地,

本文將介紹如何使用使用 Node.js 的 https 模塊和 fs 模塊實(shí)現(xiàn)了三個(gè) HTTP 請(qǐng)求的功能。分別展示了如何通過 HTTPS 發(fā)起 GET 請(qǐng)求獲取 JSON 數(shù)據(jù)、發(fā)送帶有請(qǐng)求頭的 POST 請(qǐng)求,以及下載圖片并保存到本地。以下是對(duì)每個(gè)部分的詳細(xì)說明。

1. 引入必要的模塊

const http = require("http");   // 用于發(fā)起HTTP請(qǐng)求
const https = require("https"); // 用于發(fā)起HTTPS請(qǐng)求
const fs = require("fs");       // 用于文件操作(如保存圖片)
  • http模塊:Node.js內(nèi)置的一個(gè)核心模塊,可用于創(chuàng)建HTTP服務(wù)器或發(fā)起HTTP客戶端請(qǐng)求。
  • https模塊:這是Node.js內(nèi)置的模塊,專門用于處理HTTPS協(xié)議的網(wǎng)絡(luò)請(qǐng)求。與http模塊相比,https模塊支持SSL/TLS加密,確保數(shù)據(jù)傳輸?shù)陌踩浴?/li>
  • fs模塊:用于文件系統(tǒng)的操作,例如創(chuàng)建文件流以保存下載的圖片。

下面的代碼例子將使用 https 模塊發(fā)送請(qǐng)求,如需發(fā)送 http 請(qǐng)求,可將代碼中的 https 換成 http。

2. GET請(qǐng)求獲取JSON數(shù)據(jù)

功能描述

通過HTTPS發(fā)起一個(gè)GET請(qǐng)求,從jsonplaceholder.typicode.com/posts/5獲取指定ID的文章數(shù)據(jù),并將返回的JSON數(shù)據(jù)解析后輸出到控制臺(tái)。

核心代碼分析

const get_options = {
  hostname: "jsonplaceholder.typicode.com", // 目標(biāo)服務(wù)器域名
  port: 443, // HTTPS 默認(rèn)端口號(hào)為443  HTTP默認(rèn)端口號(hào)為80
  path: "/posts/5", // 請(qǐng)求路徑,獲取 ID 為 5 的文章
  method: "GET", // 請(qǐng)求方法
};

//創(chuàng)建請(qǐng)求
const get_req = https.request(get_options, (res) => {
  let data = "";

  res.on("data", (chunk) => {
    data += chunk; // 將響應(yīng)數(shù)據(jù)片段拼接到變量中
  });

  res.on("end", () => {
    const jsonData = JSON.parse(data); // 解析 JSON 數(shù)據(jù)
    console.log(jsonData); // 輸出解析后的 JSON 對(duì)象
  });
});

get_req.on("error", (error) => {
  console.error(`Problem with request: ${error.message}`); // 處理請(qǐng)求錯(cuò)誤
});

get_req.end(); // 發(fā)送請(qǐng)求

參數(shù)說明

  • hostname: 指定目標(biāo)服務(wù)器的域名,這里是jsonplaceholder.typicode.com。
  • port: HTTPS 協(xié)議默認(rèn)使用的端口是443。
  • path: 請(qǐng)求的具體路徑,/posts/5表示獲取ID為5的文章。
  • method: 請(qǐng)求方法,這里使用GET。
  • https.request: 創(chuàng)建一個(gè)HTTPS請(qǐng)求對(duì)象。
  • res.on('data', callback): 監(jiān)聽響應(yīng)數(shù)據(jù)流,每次接收到數(shù)據(jù)片段時(shí)觸發(fā)回調(diào)函數(shù)。
  • res.on('end', callback): 當(dāng)所有數(shù)據(jù)接收完畢時(shí)觸發(fā)回調(diào)函數(shù)。
  • JSON.parse(data): 將接收到的字符串形式的JSON數(shù)據(jù)解析為JavaScript對(duì)象。
  • get_req.end(): 發(fā)送請(qǐng)求, Node.js會(huì)開始監(jiān)聽服務(wù)器的響應(yīng),并依次觸發(fā)data、end等事件。

3. POST請(qǐng)求發(fā)送JSON數(shù)據(jù)

功能描述

構(gòu)造一個(gè)POST請(qǐng)求,向jsonplaceholder.typicode.com/posts發(fā)送JSON數(shù)據(jù)。展示了如何設(shè)置請(qǐng)求頭(如Content-TypeContent-Length),并將JSON數(shù)據(jù)作為請(qǐng)求體發(fā)送。

核心代碼分析

const post_options = {
  hostname: "jsonplaceholder.typicode.com",
  port: 443,
  path: "/posts",
  method: "POST",
  Headers: { // 設(shè)置請(qǐng)求頭
    "Content-Type": "application/json", // 指定請(qǐng)求體類型為 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();

參數(shù)說明

  • Headers: 設(shè)置請(qǐng)求頭信息。
    • Content-Type: 指定請(qǐng)求體的MIME類型為application/json。
    • Content-Length: 指定請(qǐng)求體的字節(jié)長度,使用Buffer.byteLength計(jì)算。
  • JSON.stringify: 將JavaScript對(duì)象序列化為JSON字符串。
  • Buffer.byteLength: 計(jì)算字符串的字節(jié)長度。

4. 下載圖片并保存到本地

功能描述

通過HTTPS發(fā)起一個(gè)GET請(qǐng)求,從cdn2.thecatapi.com/images/2OKotXbFe.jpg下載一張貓的圖片,并將其保存到本地文件系統(tǒng)。

核心代碼分析

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(); // 消耗響應(yīng)數(shù)據(jù)以釋放內(nèi)存
      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();
參數(shù)說明
  • hostname: 圖片服務(wù)器的域名,這里是cdn2.thecatapi.com。
  • path: 圖片資源的路徑,/images/2OKotXbFe.jpg。
  • fs.createWriteStream(filePath): 創(chuàng)建一個(gè)可寫流,用于將圖片數(shù)據(jù)保存到本地文件。
  • res.pipe(fileStream): 將響應(yīng)數(shù)據(jù)管道傳輸?shù)轿募髦小?/li>
  • fileStream.on('finish', callback): 當(dāng)文件寫入完成時(shí)觸發(fā)回調(diào)函數(shù)。
  • fileStream.close(callback): 關(guān)閉可寫流,并觸發(fā)回調(diào)函數(shù)。
  • res.resume(): 如果狀態(tài)碼不是200,消耗掉響應(yīng)數(shù)據(jù)以釋放內(nèi)存。

總結(jié)

本文詳細(xì)介紹了如何使用Node.js的https模塊發(fā)起不同類型的HTTP請(qǐng)求,并通過一個(gè)完整代碼示例展示了如何實(shí)現(xiàn)以下功能:

  1. 使用GET請(qǐng)求獲取JSON數(shù)據(jù)。
  2. 構(gòu)造POST請(qǐng)求發(fā)送JSON數(shù)據(jù)。
  3. 下載圖片并保存到本地。

通過這些示例,讀者可以掌握https模塊的基本用法,并能夠根據(jù)實(shí)際需求擴(kuò)展功能。無論是開發(fā)RESTful API客戶端還是實(shí)現(xiàn)文件下載工具,https模塊都是不可或缺的重要工具。

到此這篇關(guān)于Node.js進(jìn)行http/https請(qǐng)求和下載的實(shí)現(xiàn)實(shí)例的文章就介紹到這了,更多相關(guān)Node.js http/https請(qǐng)求和下載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • node.js中的http.request方法使用說明

    node.js中的http.request方法使用說明

    這篇文章主要介紹了node.js中的http.request方法使用說明,本文介紹了http.request的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼需要的朋友可以參考下
    2014-12-12
  • nodejs簡單讀寫excel內(nèi)容的方法示例

    nodejs簡單讀寫excel內(nèi)容的方法示例

    這篇文章主要介紹了nodejs簡單讀寫excel內(nèi)容的方法,簡單分析了nodejs常見的讀寫Excel模塊,并結(jié)合實(shí)例形式分析了nodejs讀寫Excel具體操作技巧,需要的朋友可以參考下
    2018-03-03
  • 在 Node.js 中使用 async 函數(shù)的方法

    在 Node.js 中使用 async 函數(shù)的方法

    利用 async 函數(shù),你可以把基于 Promise 的異步代碼寫得就像同步代碼一樣。一旦你使用 async 關(guān)鍵字來定義了一個(gè)函數(shù),那你就可以在這個(gè)函數(shù)內(nèi)使用 await 關(guān)鍵字。下面通過本文給大家分享Node.js 中使用 async 函數(shù)的方法,一起看看吧
    2017-11-11
  • node vue項(xiàng)目開發(fā)之前后端分離實(shí)戰(zhàn)記錄

    node vue項(xiàng)目開發(fā)之前后端分離實(shí)戰(zhàn)記錄

    其實(shí)基于vue.js+node.js構(gòu)建的開源博客系統(tǒng)有很多,下面這篇文章主要給大家介紹了關(guān)于node vue項(xiàng)目開發(fā)之前后端分離的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來一起看看吧。
    2017-12-12
  • Node.js+ES6+dropload.js實(shí)現(xiàn)移動(dòng)端下拉加載實(shí)例

    Node.js+ES6+dropload.js實(shí)現(xiàn)移動(dòng)端下拉加載實(shí)例

    這個(gè)demo服務(wù)由Node搭建服務(wù)、下拉加載使用插件dropload,數(shù)據(jù)渲染應(yīng)用了ES6中的模板字符串。有興趣的小伙伴可以自己嘗試下
    2017-06-06
  • NodeJs內(nèi)存占用過高的排查實(shí)戰(zhàn)記錄

    NodeJs內(nèi)存占用過高的排查實(shí)戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于NodeJs內(nèi)存占用過高的排查實(shí)戰(zhàn)記錄,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • node.js中的emitter.emit方法使用說明

    node.js中的emitter.emit方法使用說明

    這篇文章主要介紹了node.js中的emitter.emit方法使用說明,本文介紹了emitter.emit的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 使用NodeJs 開發(fā)微信公眾號(hào)(三)微信事件交互實(shí)例

    使用NodeJs 開發(fā)微信公眾號(hào)(三)微信事件交互實(shí)例

    這篇文章主要介紹了使用NodeJs 開發(fā)微信公眾號(hào)(三)微信事件交互實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • 使用node-canvas在服務(wù)端渲染echarts圖表解析

    使用node-canvas在服務(wù)端渲染echarts圖表解析

    這篇文章主要介紹了使用node-canvas在服務(wù)端渲染echarts圖表解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Node.js中的模塊機(jī)制學(xué)習(xí)筆記

    Node.js中的模塊機(jī)制學(xué)習(xí)筆記

    這篇文章主要介紹了Node.js中的模塊機(jī)制學(xué)習(xí)筆記,本文講解了CommonJS模塊規(guī)范、Node模塊實(shí)現(xiàn)過程、模塊調(diào)用棧、包與NPM等內(nèi)容,需要的朋友可以參考下
    2014-11-11

最新評(píng)論

阆中市| 陕西省| 襄垣县| 秦安县| 西丰县| 台中市| 三江| 金平| 桐梓县| 津市市| 江源县| 若羌县| 赤水市| 万安县| 拜城县| 长宁区| 岳普湖县| 将乐县| 巴林右旗| 灵山县| 福泉市| 桐柏县| 石渠县| 大名县| 庆安县| 塔河县| 莱阳市| 三明市| 南乐县| 西平县| 阜南县| 金沙县| 庆云县| 绩溪县| 繁峙县| 山西省| 鄂尔多斯市| 樟树市| 鄂尔多斯市| 永丰县| 天津市|