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

Node.js使用request库发送请求时,如何获取请求负载的Content-Length?

解决Node.js request库手动设置Content-Length的问题

嘿,我之前也遇到过一模一样的困扰!其实核心问题在于Buffer.byteLength()只认字符串、Buffer这类字节可计算的类型,直接传JS对象的话,它会默认把对象转成"[object Object]"这种毫无意义的字符串,自然算不对长度。下面给你两种解决方案,按需选择:

方案一:手动序列化+计算长度(适合非要手动设置的场景)

你需要先把JS对象序列化为JSON字符串,再用Buffer.byteLength()计算它的字节数(记得指定编码,一般是utf8),最后把这个值放到请求头里:

const request = require('request');

// 你的请求负载对象
const requestPayload = { username: 'simbro', action: 'submit' };

// 1. 把对象转成JSON字符串
const jsonString = JSON.stringify(requestPayload);
// 2. 计算字节长度(必须指定编码,否则可能出现长度偏差)
const contentLength = Buffer.byteLength(jsonString, 'utf8');

// 发送请求
request({
  url: 'https://你的远程API地址',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': contentLength.toString() // 请求头值需要是字符串类型
  },
  body: jsonString // 这里要传序列化后的字符串,不能传原对象
}, (err, res, body) => {
  if (err) {
    console.error('请求失败:', err);
    return;
  }
  console.log('响应结果:', body);
});

方案二:让request库自动处理(更省心)

其实request库本身就支持自动处理JSON格式的请求负载,你根本不用手动算Content-Length!只要把负载放到json字段里,库会自动帮你完成:

  • 把JS对象序列化为JSON字符串
  • 设置Content-Type: application/json请求头
  • 自动计算并设置Content-Length头

代码示例:

const request = require('request');

const requestPayload = { username: 'simbro', action: 'submit' };

request({
  url: 'https://你的远程API地址',
  method: 'POST',
  json: requestPayload // 直接传原对象就行!
}, (err, res, body) => {
  if (err) {
    console.error('请求失败:', err);
    return;
  }
  console.log('响应结果:', body);
});

这个方案不仅代码更简洁,还能避免手动计算可能出现的编码错误,推荐优先使用~

内容的提问来源于stack exchange,提问作者simbro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:26:34