web-dev-qa-db-fra.com

Requête HTTPS dans NodeJS

J'essaie d'écrire une application NodeJS qui communiquera avec l'API OpenShift REST) à l'aide de la méthode de requête du package https. Voici le code:

var https = require('https');

var options = {
  Host: 'openshift.redhat.com',
  port: 443,
  path: '/broker/rest/api',
  method: 'GET'
};

var req = https.request(options, function(res) {
  console.log(res.statusCode);
  res.on('data', function(d) {
    process.stdout.write(d);
  });
});
req.end();

req.on('error', function(e) {
  console.error(e);
});

Mais cela me donne une erreur (le code d’état 500 est renvoyé). Quand j'ai fait la même chose en utilisant curl sur la ligne de commande,

curl -k -X GET https://openshift.redhat.com/broker/rest/api

Je reçois la réponse correcte du serveur.

Y at-il quelque chose de mal dans le code?

52
ssb

En comparant les en-têtes curl et les nœuds envoyés, j'ai trouvé que l'ajout de:

headers: {
    accept: '*/*'
}

à options le corrige.


Pour voir quels en-têtes sont envoyés par curl, vous pouvez utiliser l'argument -v.
curl -vIX GET https://openshift.redhat.com/broker/rest/api

Dans le noeud, juste console.log(req._headers) après req.end().


Astuce: vous pouvez utiliser https.get() au lieu de https.request(). Il définira la méthode sur GET et appelle req.end() pour vous.

46
MiniGod