在 Node.js 中卷曲到 Axios - 使用提供的证书实现工作卷曲请求时出现问题 - ECONNRESET / 套接字挂起错误
Curl to Axios in Node.js - Problem with implementing working curl request with provided certificates - ECONNRESET / Socket hang up error
我一直在尝试在 Axios (Node.js) 中实现有效的 curl 请求,但没有成功。
工作的 curl 请求看起来像这样(我无法分享确切的请求,因为 API 是私有的):
curl --cacert server.pem --cert client.pem:123password456 -i -H "accept:application/json" -H "content-Type:application/json" "https://example.endpoint.com/"
所以我有这两个文件,服务器证书server.pem
和客户端证书client.pem
,密码123password456
。当我 运行 这个 curl 请求时,我得到成功的响应(200 OK)。但是,我在 Node.js 中的 Axios 实现并非如此。
我在节点中的 axios 请求如下所示:
const axios = require("axios");
const https = require("https");
const fs = require("fs");
const httpsAgent = new https.Agent({
cert: fs.readFileSync("./client.pem"),
passphrase: "123password456",
ca: fs.readFileSync("./server.pem"),
rejectUnauthorized: false
});
const axiosInstance = axios.create({
httpsAgent: httpsAgent
});
// Error on following line called in async function
let response = await axiosInstance.get("https://example.endpoint.com/");
当我在 Node 中 运行 上面的代码时,它立即抛出 Axios 错误:
Error: socket hang up\n at connResetException (node:internal/errors:691:14)...
Error object:
{
code:'ECONNRESET'
message:'socket hang up'
isAxiosError:true
...
}
我已经尝试过各种编辑(例如不使用 axios 实例并且仅使用 axios 对象)。非常感谢您的帮助
我已设法自行解决问题。检查证书文件后,我发现提供的客户端证书文件 client.pem
包含客户端证书和私钥。使用https模块创建的https代理需要私钥单独指定为key
,修改后的httpsAgent
应该是这样的:
const httpsAgent = new https.Agent({
cert: fs.readFileSync("./client.pem"),
key: fs.readFileSync("./key.pem"),
passphrase: "123password456",
ca: fs.readFileSync("./server.pem"),
rejectUnauthorized: false
});
我一直在尝试在 Axios (Node.js) 中实现有效的 curl 请求,但没有成功。
工作的 curl 请求看起来像这样(我无法分享确切的请求,因为 API 是私有的):
curl --cacert server.pem --cert client.pem:123password456 -i -H "accept:application/json" -H "content-Type:application/json" "https://example.endpoint.com/"
所以我有这两个文件,服务器证书server.pem
和客户端证书client.pem
,密码123password456
。当我 运行 这个 curl 请求时,我得到成功的响应(200 OK)。但是,我在 Node.js 中的 Axios 实现并非如此。
我在节点中的 axios 请求如下所示:
const axios = require("axios");
const https = require("https");
const fs = require("fs");
const httpsAgent = new https.Agent({
cert: fs.readFileSync("./client.pem"),
passphrase: "123password456",
ca: fs.readFileSync("./server.pem"),
rejectUnauthorized: false
});
const axiosInstance = axios.create({
httpsAgent: httpsAgent
});
// Error on following line called in async function
let response = await axiosInstance.get("https://example.endpoint.com/");
当我在 Node 中 运行 上面的代码时,它立即抛出 Axios 错误:
Error: socket hang up\n at connResetException (node:internal/errors:691:14)...
Error object:
{
code:'ECONNRESET'
message:'socket hang up'
isAxiosError:true
...
}
我已经尝试过各种编辑(例如不使用 axios 实例并且仅使用 axios 对象)。非常感谢您的帮助
我已设法自行解决问题。检查证书文件后,我发现提供的客户端证书文件 client.pem
包含客户端证书和私钥。使用https模块创建的https代理需要私钥单独指定为key
,修改后的httpsAgent
应该是这样的:
const httpsAgent = new https.Agent({
cert: fs.readFileSync("./client.pem"),
key: fs.readFileSync("./key.pem"),
passphrase: "123password456",
ca: fs.readFileSync("./server.pem"),
rejectUnauthorized: false
});