gpt4 book ai didi

javascript - 用于使用 https 的 REST 适配器

转载 作者:行者123 更新时间:2023-12-03 10:14:30 25 4
gpt4 key购买 nike

我正在 Express 中编写一个 REST 适配器,它将传入的 REST 调用转换为北向设备公开的另一个 REST API。因此,本质上,客户端设备向适配器公开的 REST API 发送请求,而适配器向另一个设备发送 REST 请求。因此,适配器既是客户端设备的 REST 服务器,也是北向设备的 REST 客户端。

var express = require('express');
var router = express.Router();
var request = require('request');

router.route('/')
.get(function(req, res) {
request('URL'', function (error, response, body) {

if (!error && response.statusCode == 200) {
console.log("Sent to MOS");
console.log(body) // Print the google web page.
}
})
});

module.exports = router;

我正在使用请求模块。我的北向设备正在公开 https REST API。当我在上面代码的 URL 部分插入 https(注意“s”)REST API 调用时,我没有从北向设备得到答复。

如果上面的“URL”指向 https 网站,则效果很好,例如 https://www.httpsnow.org/ 。另外,当我在 POSTMAN 中或在同一设备上的浏览器中使用 https REST API 时,我会得到正确的响应。

所以我不明白为什么它可以在 POSTMAN 中工作,但不能在我的代码中工作。从浏览器中,我必须首先接受证书,所以我猜问题是我的代码未经过身份验证,但如何构建该身份验证?

最佳答案

这是一个微不足道的错误 - 您的服务器打开到 HTTPS 服务器的连接,服务器的证书似乎无效,握手被拒绝,并且您收到错误而不是响应。

幸运的是,request native 支持自定义 HTTPS 证书(即显示为无效的证书将显示为有效)。

您可以使用agentOptions选项来实现此目的。下载您必须使用浏览器接受的证书(他们应该在他们的文档中提供一个)并将其保存为 ca.cert.pem (或其他扩展名,具体取决于他们提供的内容)文件夹作为您正在构建的 Node.js 应用程序。

然后像这样使用它:

var request = require('request');
var fs = require('fs');

request({
url: 'https://api.some-server.com/',
agentOptions: {
ca: fs.readFileSync('ca.cert.pem') //Note: This will load the ca synchronously. Avoid doing this in production.
}
}, function(error, response, body){
if(error){
console.warn(error); //If an error occurred, you'll be informed
return; //Won't run the rest of the function
}

if(response.statusCode === 200){
//Do whatever you want
}
});

关于javascript - 用于使用 https 的 REST 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29949701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com