1. 程式人生 > >node.js傳送https或http請求時可接收引數及出現的bug總結

node.js傳送https或http請求時可接收引數及出現的bug總結

傳送http請求注意事項

在使用node.js傳送http或https請求時,需注意:
如果是傳送http請求,需要匯入的node模組是:const http = require(‘http’);
如果是傳送https請求,需要匯入的node模組是:const https = require(‘https’);
兩者是分開匯入的。

傳送http請求可接收的引數

  1. 傳送http請求時,接收引數:
    option 陣列物件,包含以下引數:

    host: 表示請求網站的域名或IP地址(請求的地址)。 預設為’localhost’。

    hostname: 伺服器名稱,主機名是首選的值。

    port: 請求網站的埠,預設為 80。

    localAddress: 建立網路連線的本地

    socketPath: Unix Domain Socket(Domain套接字路徑)

    method: HTTP請求方法,預設是 ‘GET’。

    path: 請求的相對於根的路徑,預設是’/’。QueryString應該包含在其中。例如:/index.html?page=12

    headers: 請求頭物件。

    auth: Basic認證(基本身份驗證),這個值將被計算成請求頭中的 Authorization 部分。

    callback : 回撥,傳遞一個引數,為 http.ClientResponse的例項。http.request 返回一個 http.ClientRequest 的例項。

傳送http請求出現的bug總結

  • 1 Error: getaddrinfo ENOTFOUND https://xx.dd.com
    這裡寫圖片描述

    解決方法:在node.js中使用http或者https傳送請求的時候host不要帶http://或者https://,直接寫xx.yy.com即可。

  • 2 Error: write EPROTO 101057795:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:openssl\ssl\s23_clnt.c:825:
    這裡寫圖片描述

    解決方法:使用https的時候的預設埠是443,如果在設定埠的時候設定成了80(使用http的預設埠是80)會報此錯誤。改成443或者server定義的https的埠即可。

  • 3 Error: unable to verify the first certificate
    <img src="111/png"/>

今天npm install總是報錯:unable to verify the first certificate(無法驗證第一證書),查了一下發現

As of February 27, 2014, npm no longer supports its self-signed certificates.
2014年2月27日,npm不再支援自簽名證書。

因為npm install走的是https協議,需要通過數字證書來保證的。
(1) 解決方法1:
取消ssl驗證:npm config set strict-ssl false;
如果還沒成功,則將npm源更換為國內映象:
npm config set registry http://registry.cnpmjs.org/
npm config set registry http://registry.npm.taobao.org/
(2)解決方法2:
在傳送https請求的時候指定忽略證書驗證,即options的rejectUnauthorized引數設定為false

    var https = require('https'); 
    var options = { 
      hostname: 'encrypted.google.com', 
      port: 443, 
      path: '/', 
      method: 'GET', 
      rejectUnauthorized:false
    }; 
    var req = https.request(options, function(res) { 
      console.log("statusCode: ", res.statusCode); 
      console.log("headers: ", res.headers); 
      res.on('data', function(d) { 
        process.stdout.write(d); 
      }); 
    }); 
    req.end(); 
    req.on('error', function(e) { 
      console.error(e); 
    });