簡體   English   中英

REST適配器可與https一起使用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM