Node http.request does nothing

var http = require('http');

var options = {
    method: 'GET',
    host: 'www.google.com',
    port: 80,
    path: '/index.html'
};

http.request(
    options,
    function(err, resBody){
        console.log("hey");
        console.log(resBody);
        if (err) {
            console.log("YOYO");
            return;
        }
    }
);

For some reason this just times out and doesn't log anything to the console.

I'm aware that I could require('request') but I need to use http to be compatible with a plugin I'm using.

Also, background on my versions: Node is v0.8.2

You prepared a request object, but didn't fire it with .end(). (Also the callback doesn't work that way.)

See: http://nodejs.org/api/http.html#http_event_request

Use the example here: http://nodejs.org/api/http.html#http_http_request_options_callback

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

var req = http.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();

the callback does not have an error parameter, you should use on("error", ...) and your request doesn't get sent till you call end()

Couple things here:

  • Use hostname not host so you are compatible with url.parse() (see here)
  • The callback for request takes one argument which is an http.ClientResponse
  • To catch an error use req.on('error', ...)
  • When using http.request you need to end the request when you are done req.end() this is so you can write any body you need to (with req.write()) before ending the request
    • Note: http.get() will do this for you under the hood, which may be why you forgot.

Working code:

var http = require('http');

var options = {
    method: 'GET',
    hostname: 'www.google.com',
    port: 80,
    path: '/index.html'
};

var req = http.request(
    options,
    function(res){
        console.log("hey");
        console.log(res);
    }
);

req.on('error', function(err) {
  console.log('problem', err);
});

req.end();