Node.js发起API请求如何加载SSL证书?现有实现返回400错误如何解决
问题原因
node-fetch以及Node内置的原生fetch都不支持直接在根配置项传入cert、key参数,需要先将证书、密钥配置到自定义的HTTPS Agent中,再将Agent传入请求配置。
正确实现代码
import fs from 'node:fs' // 若使用Node 18+内置原生fetch,可删除下面这行node-fetch的引入 import fetch from 'node-fetch' import https from 'node:https' const httpsAgent = new https.Agent({ cert: fs.readFileSync("/tmp/certs/ct.crt", 'utf-8'), key: fs.readFileSync("/tmp/certs/ct.key", 'utf-8'), // 若第三方使用自签名证书,可取消注释下方配置,正规CA签发证书无需配置 // rejectUnauthorized: false, // 若证书设置了密码,补充下方配置填写证书密码 // passphrase: "YOUR_CERT_PASSPHRASE" }) const requestOptions = { method: 'GET', agent: httpsAgent }; const res = await fetch("https://url.com?unique_ID=1234&key=abcd", requestOptions); // 如仍有报错,可打印响应文本查看服务端返回的具体错误信息 // console.log(await res.text())
额外排查建议
如果调整后仍返回400错误,可优先检查以下项:
- 对比Insomnia中的请求头,确认是否遗漏了
Accept、Content-Type等服务端要求的必填头字段 - 确认URL参数的编码格式和Insomnia完全一致,特殊字符没有被意外转义或漏转义
- 检查证书文件是否完整,读取到的内容和Insomnia中导入的证书完全一致
内容的提问来源于stack exchange,提问作者kevmo
相关产品推荐
相关产品推荐

