[英]REST adapter to work with https
我正在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上運行,但不能從我的代碼中運行。 從broser我必須首先接受證書,所以我想問題是我的代碼未通過身份驗證,但是如何建立身份驗證?
這是一個簡單的錯誤-您的服務器打開了與HTTPS服務器的連接,該服務器的證書似乎無效,握手被拒絕,並且您收到錯誤而不是響應。
幸運的是, 請求本地支持自定義HTTPS證書(即,將顯示為無效的證書將顯示為有效)。
您可以為此使用agentOptions
選項。 下載您必須在瀏覽器中接受的證書(它們應在其文檔中提供一個證書),並將其ca.cert.pem
為與Node.js應用程序位於同一文件夾中的ca.cert.pem
(或其他擴展名,具體取決於它們提供的ca.cert.pem
)。你正在建造。
然后像這樣使用它:
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
}
});
這可能是北向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
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.