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

Node.js中Axios调用第三方API遇证书错误及400问题求助

问题解决步骤

先修复400 Bad Request的核心原因

你当前代码的Axios配置存在两个关键错误,这是导致400的主要原因:

  1. 请求头未放在headers字段中,而是直接平级放在config对象里,Axios无法正确识别这些头信息;
  2. 发送multipart/form-data格式数据时,没有用FormData对象包装普通JS对象,导致数据编码不符合要求。

修正后的代码示例:

const https = require('https');
const axios = require('axios');
const FormData = require('form-data'); // 需先安装:npm install form-data

// 用FormData构造符合要求的请求体
const data = new FormData();
data.append('StartTime', startDate);
data.append('EndTime', endDate);
// 部分ASP.NET Core接口要求Token放在请求体中,可对照Postman的请求详情调整
data.append('RequestVerificationToken', 'CfDJ8Nr2EC612OFAjHvozOYXtlRBtAUjb36TUpOhI0yuLADjcckB_h1xKJWHDwl0MrqyE4_4pU_YXUkeh5uI66UBXedMcMmihENJ5hpfW_vBgNWZJ-JtliiE4UYvxNJCvvhmGvIWSKWeeqx-llCxrPio9Tw');

const httpsAgent = new https.Agent({ rejectUnauthorized: false });

try {
  const response = await axios.post('https://cebcare.ceb.lk/Incognito/GetLoadSheddingEvents', data, {
    httpsAgent,
    headers: { // 所有请求头必须放在headers对象内
      Cookie: '.AspNetCore.Antiforgery.ThOcTlhnrMo=CfDJ8Nr2EC612OFAjHvozOYXtlRQE9n05fuSOD0jEvKY0unmx8QyMYxdCfmotrhzVIKzurnhpkY_MtfAP9cmpR11u8rzt7_xz4IkuWMURwfelg7ymSJ8GaksLVwEgbMIkEDfrvjb5II6EzzTaLA5RiXRDXU',
      ...data.getHeaders() // 自动生成含boundary的Content-Type头,避免手动设置出错
    }
  });
  console.log(response.data);
} catch (error) {
  console.error(error.response?.data || error.message);
}

关键细节说明

  1. 请求头的正确配置:Axios的config参数中,所有请求头都必须放在headers属性下,否则无法被正确发送到服务器;
  2. multipart格式处理:直接传普通JS对象时,Axios不会自动编码为multipart格式,必须使用FormData对象,并通过data.getHeaders()自动生成符合规范的Content-Type头;
  3. Token的位置:ASP.NET Core的防伪造Token可能要求放在请求体或请求头中,可打开Postman的请求详情(查看Body和Headers)对比,调整代码中Token的放置位置。

关于Cookie和RequestVerificationToken的问题

  • 能否绕过?:不能。这是ASP.NET Core内置的防跨站请求伪造(CSRF)机制,服务器会验证Cookie中的防伪造标识与请求中的Token是否匹配,缺失或不匹配会直接返回错误;
  • 能否硬编码?:可以临时使用,但不推荐。这两个值与会话绑定,一段时间后会过期,过期后请求失效。更可靠的方式是先请求https://cebcare.ceb.lk/Incognito/DemandMgmtSchedule页面,从响应Cookie和页面HTML的隐藏input中动态提取Token,再用这些值发送请求。

证书错误的补充说明

rejectUnauthorized: false是临时绕过证书验证的方案,生产环境不建议使用。若要彻底解决,可下载目标网站的根证书,配置httpsAgent使用该证书:

const fs = require('fs');
const httpsAgent = new https.Agent({
  ca: fs.readFileSync('./root-certificate.pem') // 替换为你的根证书文件路径
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 18:15:42