Friday, April 6, 2012

Nodejs : not sending host header by default


After having heard about nodejs for so long now , i decided to play with it today and unfortunately ended up in frustation when i was not able to make the below <20 lines code execute successfully.


var connection = http.createClient(80, "localhost");


var request = connection.request('GET', "/");

request.end();


request.on('response', function(response){
 
  var result = "";
  console.log(response.statusCode)
  response.on('data', function(chunk){
   result += chunk;
  })
  response.on('end', function(){
   console.log(result);
  })
  
});
 
connection.addListener('error' , function (connectionException){
 console.log("ERROR occured while calling Rotten Tomatoes Api "+connectionException);
})

I was initially making call to rottentomatoes api and was getting 400 , Bad request.
I changed hostname to localhost ( i had apache running locally) and was more frustated to see the same 400. This prompted me to check the apache error_log and this is what i was getting there

client sent HTTP/1.1 request without hostname (see RFC2616 section 14.23):

and little googling told me that nodejs does not send the host header by default [Stumped]. so i had to manually add the host header like below.
var request = connection.request('GET', "/" , {"Host":"localhost");


I am not sure but i think it should be a good idea to include some common headers by default in the request sent by nodejs.

No comments:

Post a Comment