node request 解决请求时 有时候 content-length 获取不到

2023-11-13

今天使用了 request 模块的时候,想获取每次请求的大小,以方便判断下载进度,网速等等。。
然后 content-length 头总是获取不到,下面给出解决方法


request 模块的使用方法见 api 文档 :
https://github.com/request/request

解决方法

很简单,只需要在 request(url) 之前,请求一次目标地址

来看官方解释:

Request can also pipeto itself. When doing so,content-typeand content-length are preserved in the PUT headers.
“请求也可以通过管道传递到自身。执行此操作时,内容类型和内容长度将保留在PUT标头中。”

request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))

所以我们只需要这样做

const request = require('request');
const fs = require('fs');
const axios = require('axios')
/*
 * url 网络文件地址
 * filename 文件名
 * return  Promise
 */
function downloadFile(uri, filename) {
	var event = new EventEmitter();


	var stream = fs.createWriteStream(filename);
	//先访问一次uri目标地址,确保第二次可以拿到content -length 头
	request(uri)
	request(uri).on('response', response => {
		console.log(response)
		//监听data数据
		response.on('data', data => {
			event.emit('downloading', response.headers['content-length'], data.length);
		})
	
	})
	.pipe(stream).on('close', () => {
		event.emit('finish');
	})
 
	return event

}

export default downloadFile

使用 response.headers['content-length'] 获取 header content-length 的值

  • data.length 是此次接收的数据

downloadFile 这个可以当做工具类直接使用
例如:


let event = downloadFile('https://baidu.com/hello.zip', 'hello.zip')
let recive_length = 0
event.on('downloading', (total_length, length) => {
	//total_length 文件总长度
	//length 此次接收的长度
	recive_length += length
	//下载进度为:接收的总长度/总长度 * 100
	console.log(parseInt((recive_length / total_length) * 100))
})
event.on('finish', () => {
	console.log("任务结束")
})

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node request 解决请求时 有时候 content-length 获取不到 的相关文章

  • $http.get() 与 JSON 数据

    我正在编写一个服务器应用程序 并希望客户端使用正文中的数据来参数化我的 GET 方法 如下所示 http v GET http localhost 3000 url text 123 foo bar GET url HTTP 1 1 Acc
  • 如何在flutter项目中使用http拦截器?

    我必须向我的所有 Api 添加标头 有人告诉我为此使用 http 拦截器 但我无法理解如何做到这一点 因为我是颤振的新手 谁能帮我举个例子吗 您可以使用http 拦截器 https pub dev packages http interce
  • 使用 Socket.IO 时如何访问会话标识符?

    我有一个聊天 我需要管理独特的连接 我四处搜寻 但我找到的解决方案似乎都已被弃用 那么 如何使用 Socket IO 获取套接字的会话 ID 我在用着Node js http en wikipedia org wiki Node js Ex
  • Morgan Logger + Express.js:写入文件并在控制台中显示

    我正在尝试将 Morgan 与 Express js 结合使用来编写日志文件 同时也在控制台上显示我的日志 我正在使用这段代码 var logger require morgan var accessLogStream fs createW
  • Node.js - 生成的进程正在生成错误“execvp():没有这样的文件或目录”

    我有以下代码 旨在生成并分离子进程 它只是同一目录中的另一个 node js 脚本 这是我正在运行的确切代码 var fs require fs var child require child process var out fs open
  • 使用 Nodemailer 提交电子邮件时 NodeJs 错误

    我已按照以下步骤设置 Nodemailer 1 允许访问 Gmail 中安全性较低的应用程序 2 在app js中写入以下内容 app post reachus send function req res var transporter n
  • 使用 ObjectId 键和字符串数组定义映射作为 mongoose 模式中的值

    我在为数据库创建 Mongoose 架构时遇到问题 我想创建一个以 objectId 作为键 以字符串值数组作为值的映射 我能得到的最接近的是 var schema new Schema map myId type mongoose Sch
  • 为 npm install 添加本地项目依赖

    在 npm 中添加本地项目依赖项的正确语法是什么package json file 我本地有 git 项目C projects MyApp 我想得到这个项目npm install 我尝试以下 dependencies my app file
  • 如何使用 python 的 http.client 准确读取一个响应块?

    Using http client在 Python 3 3 或任何其他内置 python HTTP 客户端库 中 如何一次读取一个分块 HTTP 响应一个 HTTP 块 我正在扩展现有的测试装置 使用 python 编写 http clie
  • 动态更改温斯顿的日志级别

    我尝试在运行时实现日志级别更改 我一直在关注https github com yannvr Winston dynamic loglevel blob master test https github com yannvr Winston
  • 用 C++ 解析 HTTP 标头

    我正在使用curl 与服务器通信 当我发出数据请求时 我收到 HTTP 标头 后跟由边界分隔的 jpeg 数据 如下所示 我需要解析出 边界字符串 内容长度 我已将传入数据复制到 char 数组 如下所示 static size t OnR
  • Node 不断恢复到旧版本

    每次我在控制台中重新启动 vagrant 时 它都会询问我的登录详细信息 然后说Now using node v7 10 0 npm v4 2 0 当我做run nvm install node I get v13 11 0 is alre
  • 简单 AJAX Get 请求“待处理”

    我正在尝试实现一个简单的 AJAX GET 请求 该请求告诉服务器删除数据库中的文档 虽然我从服务器得到文档已删除的确认 但 Chrome 检查器显示该请求处于 待处理 状态 最终导致服务器错误 我做错了什么 HTML div class
  • React-Native 打包器失败:模块名称重复

    这在开发过程中似乎是随机发生的 当尝试跑步时npm start or react native run ios 我收到以下错误 Failed to build DependencyGraph providesModule naming co
  • GraphQL 预期可迭代,但未找到字段 xxx.yyy 的迭代

    我目前正在尝试使用 NodeJS 进行 GraphQL 但我不知道为什么以下查询会出现此错误 library name user name email 我不确定是否type of my resolveLibrary是对的 因为在任何例子中我
  • 如何使用 Chai Http 发布对象数组

    我正在尝试发布一个对象数组ChaiHttp https github com chaijs chai http像这样 agent post route to api send locations lat lat1 lon lon1 lat
  • 从手机访问本地主机[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • Nodejs - 检查隐藏文件

    我正在迭代文件目录 想知道是否可以测试文件是否隐藏 目前 我只是检查文件是否以 开头或不 这适用于 Mac 也许还有 Linux 但是 我想知道如何在 Windows 上做到这一点 另外 句点会在所有版本的 Linux 中隐藏该文件吗 Th
  • Angular 2 - Http - 正确忽略空结果

    我有很多处理请求并简单返回 200 的 REST 端点 我注意到将结果映射为错误json 如果我尝试不进行任何类型的映射 我会看到浏览器警告它无法解析 XML 由于不返回任何内容是很常见的 我很好奇我应该如何处理响应 这是一个基本的代码示例
  • 从节点服务器访问 Google Calendar API

    由于某种原因 我很难访问 Google 日历 我希望能够在 Node js 服务器的日历中添加和删除事件 我从文件中发现了非常矛盾的信息 我跟着 https developers google com identity protocols

随机推荐

  • FTP-----局域网内部远程桌面

    此文包含详细的图文教程 有疑问评论区留言 博主第一时间解决 目录 一 被远程桌面的电脑 1 开启远程权限 2 添加账户 有本地账户跳过这步 3 帐号隶属于 远程桌面 4 帐号隶属于 本地用户组 二 本地电脑连接远程桌面 前提条件 1 两台电
  • buffer_head数据结构

    内核版本 5 9 0 数据结构 Historically a buffer head was used to map a single block within a page and of course as the unit of I O
  • Spring boot new对象,通过上下文实例化对象

    import org springframework beans BeansException import org springframework beans factory NoSuchBeanDefinitionException i
  • 类的设计与实现 设计一个游戏的某个简单过程

    大作业1 类的设计与实现 一 实验目的 掌握类的设计与实现 了解如何根据描述发现类及其成员 具备初步的面向对象分析与设计能力 二 实验内容 请选择一个你所熟悉的游戏 分析其中的某个场景所涉及的类 及其各个类的属性和行为 完成类的定义 请选择
  • Java基础学习之函数式编程Predicate接口(JDK8)

    前言 今天继续来学习函数式编程接口之Predicate接口 1 上源码 package javax persistence criteria import java util List public interface Predicate
  • MyEclipse 服务器Tomcat v8.5无法在45秒内启动

    目录 前言 一 问题描述 二 解决方案 1 图形界面修改 2 配置文件修改 总结 前言 大家在使用 MyEclipse 开发时有遇到过 Tomcat 无法在45秒内启动的问题吗 一 问题描述 由于工作需要 要在 myeclipse 中使用
  • 认知科学和认知神经科学_认知增强的时代到了

    认知科学和认知神经科学 Ever since humans fell out of trees we ve been creating tools to help us survive One of the most important o
  • 浅谈JavaScript如何运行中断或停止

    在js运行过程中 在某些情况下想中断程序的运行 在网上查过 没有找到有这样的函数 一般情况下 大多数都是用return代替的 因为js脚本很多都是基于函数的运行 return的作用是中断函数的执行 提前退出该函数 所以在执行某个函数内部的时
  • Golang学习 - sync 包

    临时对象池 Pool 用于存储临时对象 它将使用完毕的对象存入对象池中 在需要的时候取出来重复使用 目的是为了避免重复创建相同的对象造成 GC 负担过重 其中存放的临时对象随时可能被 GC 回收掉 如果该对象不再被其它变量引用 从 Pool
  • Pycharm怎么去查找替换?Pycharm查找替换快捷方法是什么

    在使用python编辑器pycharm编写代码时 有时候需要去查找一些指定的代码或者是文件进行修改 但是一个个去翻太繁琐了 那这篇文章就来教大家怎么在pycharm中去实现快捷方便的查找替换方法 一起看看吧 1 当前文件 如果要在当前文件内
  • nginx 配置监听多个端口有什么问题

    Nginx 可以通过配置文件监听多个端口 在配置文件中使用 listen 指令来设置监听端口 在多个 listen 指令中使用不同的端口号即可实现监听多个端口 这种方式可以让 Nginx 同时支持 HTTP 和 HTTPS 协议 在配置多个
  • @WebServlet

    一 Servlet简介 Java Servlet 是运行在 Web 服务器或应用服务器上的程序 它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层 B S开发的基础 Servlet
  • C++中Vector实现,一维转二维,再将二维数组作为元素进行保存(vector、显式实例化)

    在实际工作中 我们可能需要将类似 vector pt1 2 1 2 2 2 3 2 4 2 5 结构的一维数组 转换为类似 vectorptVec 2 1 2 2 2 3 2 4 2 5 的二维数组 内的值分别代表x y坐标值 这样还不算完
  • Linux中docker常用命令大全

    一 docker命令 docker启动与关闭 启动docker systemctl start docker 关闭docker systemctl stop docker 重启docker systemctl restart docker
  • shell第3次练习

    要求 1 ping主机测试 2 判断一个用户是否存在 3 判断当前内核主版本是否为3 且次版本是否大于10 4 判断vsftpd软件包是否安装 如果没有则自动安装 5 判断httpd是否运行 6 判断指定的主机是否能ping通 必须使用 1
  • 基于WSL2的ubuntu(Windows 子系统)安装及开发环境搭建

    WSL 是 Windows Subsystem for Linux 的缩写 译为适用于Linux 的 windows 子系统 使用WSL让开发人员按原样运行 GNU Linux 环境 包括大多数命令行工具 实用工具和应用程序 且不会产生传统
  • python anaconda安装与使用

    安装 anaconda 下载 Anaconda Anaconda Distribution 打开 Anaconda Prompt 控制台 创建一个管理环境 conda create n pytorch python 3 6 conda 是指
  • NOIP2011提高组 DAY2 题解&总结

    考试时的心态 这次离线赛考的是NOIP2011 考得比较差 其实试卷比较水 水出新高度了 但是就考了160分 还是因为大意了 说实话 我一直在想第二题那个Sigma 是怎么计算的 很虚 虽然最后证明我的想法是正确的 但是由于这道题花的时间太
  • 自媒体短视频应该如何做选题?写好视频脚本?

    在这个内容同质化严重的环境下 选题成了业内人士最头疼的问题 这里分享几个常用的几个方法 1 逆向 这个方法主要是针对同质化的选题 如果一个选题 大家都在正向输出 那么我们可以逆向输出 比如 一块废铁是怎么制作成一把菜刀的 和 一把高颜值的菜
  • node request 解决请求时 有时候 content-length 获取不到

    今天使用了 request 模块的时候 想获取每次请求的大小 以方便判断下载进度 网速等等 然后 content length 头总是获取不到 下面给出解决方法 request 模块的使用方法见 api 文档 https github co