Node.js和Google Pagespeed API

我正在尝试在Node中构build一个小的Google Pagespeed客户端,但是我正在与https客户端苦苦挣扎。 请求总是返回一个302响应,但是完全相同的url在curl和浏览器中完美工作

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); }); 

我错过了什么吗? 试图发送一些不同的标题,但没有太大的区别

在主机中放置https://前缀,你应该很好走。 看到这里的文档 。

下面是一个工作示例,只需replace您自己的URL和API密钥即可:

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

 https.get({
    主持人:“www.googleapis.com”, 
    path:'/ pagespeedonline / v1 / runPagespeed?url ='+ encodeURIComponent(url)+ 
           '&键=' +键+ '&策略=' +策略
     },函数(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);
 });

您可以将Google的节点客户端库用于其API。

 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); }); }); 

客户端库还支持对您的情况可能有用的批量请求。 其他文档是https://github.com/google/google-api-nodejs-client

google-api-nodejs-client是Google官方支持的用于访问Google API的node.js客户端库。

 npm install googleapis 

对于PageSpeed Insights API,它现在是这样的:

 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 }); });