4

我正在尝试在 Node 中构建一个小的 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);
});

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

4

3 回答 3

3

删除https://主机中的前缀,你应该很高兴。请参阅此处的文档

这是一个工作示例,只需替换您自己的 URL 和 API 密钥:

var https = 要求('https'),
    键='键',
    url = '网址',
    策略 = '桌面';

https.get({
    主机:'www.googleapis.com',
    路径:'/pagespeedonline/v1/runPagespeed?url=' + encodeURIComponent(url) +
          '&key='+key+'&策略='+策略
    },函数(分辨率){
      console.log("statusCode:", res.statusCode);
      console.log("标题:", res.headers);

      res.on('数据',函数(d){
        process.stdout.write(d);
      });
}).on('错误', function(e) {
  控制台.错误(e);
});
于 2012-04-17T17:18:30.523 回答
1

您可以将 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

于 2013-03-09T20:13:20.153 回答
0

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
        });
    });
于 2013-08-13T10:14:27.280 回答