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

Node.js使用request或form-data发送带自定义头的JSON POST请求问题求助

Node.js POST提交JSON数据解决方案

问题根因说明

  • 你提供的curl请求是发送application/json格式的payload,不需要用到form-data库,form-data仅用于multipart/form-data类型的请求(如文件上传、表单字段提交场景)
  • request库原生基于回调实现,不支持Promise,直接使用await会无效;且你的传参格式不符合request库的要求,导致参数无法正确传递
  • 使用form-data时直接替换了getHeaders()的返回值,丢失了form-data必需的boundary标识,导致服务器无法解析请求体,出现携带自定义头就无数据的问题

方案1:使用request库(适配现有技术栈)

原生request不支持Promise,推荐使用promise封装的版本实现await调用:

  1. 安装依赖
    npm install request request-promise-native
  2. 实现代码
const rp = require('request-promise-native');

const requestOptions = {
  method: 'POST',
  url: 'https://personalsite.com/test.php',
  headers: {
    'accept': 'text/html',
    'SECRET-TOKEN-MESSAGE': 'dataforport',
    'Cookie': 'PHPSESSID=1d2shuebo7lal8sn2itgppvfk4'
  },
  body: {
    mobileno: '888888888',
    messagetext: 'Test message'
  },
  // 开启json配置后会自动序列化body为JSON,自动设置Content-Type为application/json
  json: true
};

try {
  const subscription = await rp(requestOptions);
  console.log('请求成功', subscription);
} catch (error) {
  console.error('请求失败', error);
}

方案2:form-data自定义头解决方法(仅适用于multipart/form-data请求场景)

如果确实需要使用form-data发送表单,自定义头需要和form-data生成的头合并,不能直接替换:

const FormData = require('form-data');
const rp = require('request-promise-native');

const bodyParams = new FormData();
bodyParams.append('mobileno', '888888888');
bodyParams.append('messagetext', 'Test message');

// 合并form内置头和自定义头,保留boundary信息
const headers = {
  ...bodyParams.getHeaders(),
  'SECRET-TOKEN-MESSAGE': 'dataforport',
  'accept': 'text/html',
  'Cookie': 'PHPSESSID=1d2shuebo7lal8sn2itgppvfk4'
};

const requestOptions = {
  method: 'POST',
  url: 'https://personalsite.com/test.php',
  headers: headers,
  formData: bodyParams
};

const smsResponse = await rp(requestOptions);

更推荐的现代方案:使用axios

request库已经停止官方维护,更推荐使用原生支持Promise、配置更简单的axios:

  1. 安装依赖
    npm install axios
  2. 实现代码
const axios = require('axios');

try {
  const response = await axios.post('https://personalsite.com/test.php', {
    mobileno: '888888888',
    messagetext: 'Test message'
  }, {
    headers: {
      'accept': 'text/html',
      'SECRET-TOKEN-MESSAGE': 'dataforport',
      'Cookie': 'PHPSESSID=1d2shuebo7lal8sn2itgppvfk4'
    }
  });
  console.log('请求成功', response.data);
} catch (error) {
  console.error('请求失败', error.response?.data || error.message);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:27:01