HTTPS request in NodeJS

node.jsRestHttpsOpenshift

node.js Problem Overview


I am trying to write a NodeJS app which will talk to the OpenShift REST API using the request method in the https package. Here is the 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);
});

But this is giving me an error (status code 500 is returned). When I did the same thing using curl on the command line,

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

I am getting the correct response from the server.

Is there anything wrong in the code?

node.js Solutions


Solution 1 - node.js

Comparing what headers curl and node sent, i found that adding:

headers: {
	accept: '*/*'
}

to options fixed it.


To see which headers curl sends, you can use the -v argument.
curl -vIX GET https://openshift.redhat.com/broker/rest/api

In node, just console.log(req._headers) after req.end().


Quick tip: You can use https.get(), instead of https.request(). It will set method to GET, and calls req.end() for you.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionssbView Question on Stackoverflow
Solution 1 - node.jsMiniGodView Answer on Stackoverflow