Node.js and Google Pagespeed API

I'm trying to build a little Google Pagespeed client in Node, but I'm struggling with the https client. The request always returns with a 302 response, but the exact same url works perfectly in curl and browsers

options = {
    host: 'https://www.googleapis.com'
    , path: '/pagespeedonline/v1/runPagespeed?url=' + program.uri + '/&prettyprint=false&strategy=' + program.strategy + '&key=' + program.key
}

https.get(options, function(res) {
    console.log("statusCode: ", res.statusCode);
    console.log("headers: ", res.headers);
    res.on('data', function(d) {
        process.stdout.write(d);
    });
}).on('error', function(e) {
    console.error(e);
});

Am I missing something? Tried sending a few different header, but it didn't make much difference

Drop the https:// prefix in host, and you should be good to go. See the docs here.

Here's a working example, just substitute your own URL and API key:

var https = require('https'),
    key = 'KEY',
    url = 'URL',
    strategy = 'desktop';

https.get({
    host: 'www.googleapis.com', 
    path: '/pagespeedonline/v1/runPagespeed?url=' + encodeURIComponent(url) + 
          '&key='+key+'&strategy='+strategy
    }, function(res) {
      console.log("statusCode: ", res.statusCode);
      console.log("headers: ", res.headers);

      res.on('data', function(d) {
        process.stdout.write(d);
      });
}).on('error', function(e) {
  console.error(e);
});

You can use Google's node client library for its APIs.

var googleapis = require('googleapis');
googleapis.load('pagespeedonline', 'v1', function(err, client) {
  // set your api key
  client = client.withApiKey('...');
  var params = { url: '...', strategy: '...' };
  var request = client.pagespeedonline.pagespeedapi.runpagespeed(params);
  request.execute(function (err, result) {
    console.log(err, result);
  });
});

The client library also supports batch requests that may be useful in your case. Further documentation is https://github.com/google/google-api-nodejs-client

google-api-nodejs-client is Google's officially supported node.js client library for accessing Google APIs.

npm install googleapis

For PageSpeed Insights API, it's now somehting like this :

require('googleapis')
    .discover('pagespeedonline', 'v1')
    .execute(function (err, psclient) {
        var params = { url: URLHERE }; // others params https://developers.google.com/speed/docs/insights/v1/getting_started
        var request = psclient.pagespeedonline.pagespeedapi.runpagespeed(params).withApiKey(YOUR_API_KEY);;
        request.execute(function (err, result) {
            //do something
        });
    });