web-dev-qa-db-fra.com

Étapes pour envoyer une demande https à un service de repos dans le nœud js

Quelles sont les étapes pour envoyer une demande https dans le noeud js à un service de repos? J'ai une api exposée comme https://133-70-97-54-43.sample.com/feedSample/Query_Status_View/Query_Status/Output1?STATUS=Joined%20school

Comment passer la demande et quelles sont les options que je dois donner pour cette API, comme l'hôte, le port, le chemin et la méthode?

17
vinod

Le moyen le plus simple consiste à utiliser le module request .

request('https://example.com/url?a=b', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body);
  }
});
26
josh3736

utilisez simplement le module de base https avec la fonction https.request . Exemple pour une requête POST (GET serait similaire):

var https = require('https');

var options = {
  Host: 'www.google.com',
  port: 443,
  path: '/upload',
  method: 'POST'
};

var req = https.request(options, function(res) {
  console.log('STATUS: ' + res.statusCode);
  console.log('HEADERS: ' + JSON.stringify(res.headers));
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

req.on('error', function(e) {
  console.log('problem with request: ' + e.message);
});

// write data to request body
req.write('data\n');
req.write('data\n');
req.end();
37
zemirco

L'utilisation du module de requête a résolu le problème.

// Include the request library for Node.js   
var request = require('request');
//  Basic Authentication credentials   
var username = "vinod"; 
var password = "12345";
var authenticationHeader = "Basic " + new Buffer(username + ":" + password).toString("base64");
request(   
{
url : "https://133-70-97-54-43.sample.com/feedSample/Query_Status_View/Query_Status/Output1?STATUS=Joined%20school",
headers : { "Authorization" : authenticationHeader }  
},
 function (error, response, body) {
 console.log(body); }  );         
4
vinod

Notez que si vous utilisez https.request, n'utilisez pas directement le corps de res.on('data',... Cela échouera si vous avez des données volumineuses à venir en morceaux. Vous devez donc concaténer toutes les données, puis traiter la réponse dans res.on('end'. Exemple -

  var options = {
    hostname: "www.google.com",
    port: 443,
    path: "/upload",
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Content-Length': Buffer.byteLength(post_data)
    }
  };

  //change to http for local testing
  var req = https.request(options, function (res) {
    res.setEncoding('utf8');

    var body = '';

    res.on('data', function (chunk) {
      body = body + chunk;
    });

    res.on('end',function(){
      console.log("Body :" + body);
      if (res.statusCode != 200) {
        callback("Api call failed with response code " + res.statusCode);
      } else {
        callback(null);
      }
    });

  });

  req.on('error', function (e) {
    console.log("Error" : " + e.message);
    callback(e);
  });

  // write data to request body
  req.write(post_data);
  req.end();
1
Aniket Thakur

Vous pouvez utiliser superagent et le module url du module pour créer une requête comme suit:

var request = require('superagent');
var url = require('url');

var urlObj = {
  protocol: 'https',
  Host: '133-70-97-54-43.sample.com',
  pathname: '/feedSample/Query_Status_View/Query_Status/Output1'
};

request
  .get(url.format(urlObj))
  .query({'STATUS': 'Joined school'})
  .end(function(res) {
    if (res.ok) {
      console.log(res.body);
    }
  });
0
David Weldon