我正在用Express编写一个REST适配器,该适配器将传入的REST调用转换为另一个REST,该API由北行设备公开。因此,从本质上说,客户端设备是向适配器公开的REST发送请求,而适配器将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。当我在上面代码的URL部分中插入https (注意's') REST调用时,我无法从向北的设备中得到答案。
如果上面的'URL‘指向https网站(比如https://www.httpsnow.org/ ),它就会运行得很好。此外,当我在POSTMAN中或在同一设备上的浏览器中使用https REST时,我会得到适当的响应。
所以我不明白为什么它会从邮递员那里工作,而不是从我的代码中。从broser开始,我必须首先接受一个证书,所以我想问题是我的代码没有经过身份验证,但是如何构建身份验证呢?
发布于 2015-04-29 17:03:53
这是一个小错误-您的服务器打开到HTTPS服务器的连接,服务器的证书似乎无效,握手被拒绝,您得到一个错误而不是响应。
幸运的是,请求本机支持自定义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
}
});
发布于 2015-04-29 16:50:16
这可能是北向web服务器配置的问题,而不是请求库本身的问题。尝试将用户代理字符串更改为其他内容:
var opts = {
url: 'URI',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'
}
};
request(opts, function (err, res, body) {
// Do stuff
});
https://stackoverflow.com/questions/29949701
复制相似问题