我一直在嘗試在 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 物件)。非常感謝您的幫助
uj5u.com熱心網友回復:
我自己設法解決了問題。檢查證書檔案后,我發現提供的客戶端證書檔案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
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/461500.html
標籤:javascript 节点.js 卷曲 axios ssl 证书
上一篇:Python:捕獲例外或鍵盤中斷
