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); });
关键说明
为什么之前POST失败?
你把httpsAgent放在了第二个参数(请求体)里,Axios不会把这部分当作配置处理,所以证书校验依然生效,抛出SELF_SIGNED_CERT_IN_CHAIN错误。GET请求能成功是因为你当时的参数顺序是对的(GET没有请求体,配置直接作为第二个参数)。为什么
NODE_TLS_REJECT_UNAUTHORIZED=0会导致401?
全局禁用证书校验可能会干扰Mikrotik RouterOS的认证流程,部分版本的RouterOS对这种全局设置的请求会拒绝认证,所以更推荐用httpsAgent的方式,仅针对单个请求跳过证书校验,避免全局影响。不要手动JSON.stringify请求体
Axios在检测到Content-Type: application/json时,会自动把对象转为JSON字符串,手动stringify反而可能导致格式错误。
内容的提问来源于stack exchange,提问作者Vebama Wanematou
相关产品推荐
相关产品推荐

