You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NodeJS中如何为带账号密码验证的URL添加请求头实现文件下载

支持带认证的文件下载脚本修改方案

要让你的脚本支持访问受用户名密码保护的链接,最常用的方式是添加**HTTP基本认证(Basic Authentication)**请求头。以下是修改后的完整代码:

function download(url, dest, username, password) {
  const fs = require("fs");
  const http = require("https");
  const urlModule = require("url");

  return new Promise((resolve, reject) => {
    const file = fs.createWriteStream(dest, { flags: "wx" });
    
    // 解析URL并构建请求选项
    const parsedUrl = urlModule.parse(url);
    const requestOptions = {
      hostname: parsedUrl.hostname,
      path: parsedUrl.path,
      headers: {}
    };

    // 如果提供了账号密码,添加Basic Auth头
    if (username && password) {
      const auth = Buffer.from(`${username}:${password}`).toString("base64");
      requestOptions.headers.Authorization = `Basic ${auth}`;
    }

    const request = http.get(requestOptions, response => {
      if (response.statusCode === 200) {
        response.pipe(file);
      } else {
        file.close();
        fs.unlink(dest, () => {}); // 删除临时文件
        reject(`服务器响应状态码:${response.statusCode},信息:${response.statusMessage}`);
      }
    });

    request.on("error", err => {
      file.close();
      fs.unlink(dest, () => {}); // 删除临时文件
      reject(err.message);
    });

    file.on("finish", () => {
      resolve();
    });

    file.on("error", err => {
      file.close();

      if (err.code === "EEXIST") {
        reject("文件已存在");
      } else {
        fs.unlink(dest, () => {}); // 删除临时文件
        reject(err.message);
      }
    });
  });
}

关键修改说明

  • 新增urlModule模块解析URL,将原URL拆分为请求所需的主机名、路径等参数。
  • 添加username和password作为函数可选参数,传入后自动生成Basic Auth认证头:
    1. 拼接username:password为字符串
    2. 用Buffer.from()将字符串转换为Base64编码
    3. 将编码结果放入Authorization请求头,格式为Basic [Base64编码串]
  • 把原http.get(url, ...)改为使用requestOptions对象发起请求,确保认证头被正确携带。

使用示例

调用时只需额外传入用户名和密码即可:

download(
  "https://example.com/protected/file.zip",
  "./local/file.zip",
  "your-username",
  "your-password"
)
.then(() => console.log("下载完成"))
.catch(err => console.error("下载失败:", err));

内容的提问来源于stack exchange,提问作者Emrik Ahlström

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:18:39