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

Axios POST请求设置httpsAgent忽略SSL证书无效问题

解决Axios调用Mikrotik RouterOS REST API的POST请求问题

核心问题:Axios参数顺序错误

你当前的POST请求代码把请求体数据和请求配置混在了第二个参数里,导致httpsAgent等配置根本没被Axios识别,所以还是会触发自签名证书校验失败的错误。

Axios.post的正确参数格式是:

axios.post(url, data, config)
  • 第二个参数:请求体的原始数据
  • 第三个参数:请求配置(包括httpsAgent、auth、headers等)

修正后的代码

const https = require('https');
const axios = require('axios');

const macAddress = "10-78-D2-F9-12-E7";
const byPassed = "bypassed";

axios.post(
  `https://192.168.8.1:8082/rest/ip/hotspot/ip-binding`,
  // 第二个参数:请求体数据,直接传对象即可,Axios会自动转JSON
  {
    "mac-address": macAddress,
    "type": byPassed
  },
  // 第三个参数:请求配置
  {
    httpsAgent: new https.Agent({ rejectUnauthorized: false }), // 仅当前请求跳过证书校验
    auth: {
      username: "****",
      password: "*****"
    },
    headers: {
      'Content-Type': 'application/json'
    }
  }
).then(response => {
  console.log(response.data);
}).catch(error => {
  console.error(error);
});

关键说明

  1. 为什么之前POST失败?
    你把httpsAgent放在了第二个参数(请求体)里,Axios不会把这部分当作配置处理,所以证书校验依然生效,抛出SELF_SIGNED_CERT_IN_CHAIN错误。GET请求能成功是因为你当时的参数顺序是对的(GET没有请求体,配置直接作为第二个参数)。

  2. 为什么NODE_TLS_REJECT_UNAUTHORIZED=0会导致401?
    全局禁用证书校验可能会干扰Mikrotik RouterOS的认证流程,部分版本的RouterOS对这种全局设置的请求会拒绝认证,所以更推荐用httpsAgent的方式,仅针对单个请求跳过证书校验,避免全局影响。

  3. 不要手动JSON.stringify请求体
    Axios在检测到Content-Type: application/json时,会自动把对象转为JSON字符串,手动stringify反而可能导致格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 06:53:21