节点

时间:2018-03-23 20:26:07

标签: javascript node.js api asynchronous

这可能是一个愚蠢的问题,但如何在API调用中添加标头?我想让这个https://docs.aws.amazon.com/AlexaWebInfoService/latest/ApiReference_TrafficHistoryAction.html起作用。到目前为止,我有这个:

let alexaCall = `https://awis.amazonaws.com/api?Action=UrlInfo&Url=${website}&ResponseGroup=Rank`;

function(callback) {
  // third call
  var results = '';
  https.get(alexaCall, resource => {
    resource.setEncoding('utf8');
    resource.on('data', function(data) {
      // results += JSON.parse(data);
      results += data;
    });
    resource.on('end', function() {
      callback(null, results);
    });
    resource.on('error', function(err) {
      callback(err);
    });
  });
},

我应该使用这个标题,但不知道如何

Authorization: AWS4-HMAC-SHA256 Credential=<IAM_ACCESS_KEY>/20171114/us-west-1/awis/aws4_request, SignedHeaders=host;x-amz-date, Signature=<GENERATED_AUTH_V4_SIGNATURE>
Content-Type: application/xml
X-Amz-Date: 20171114T190104Z
Accept: application/xml

1 个答案:

答案 0 :(得分:1)

您可以这样设置标题:

var https = require('https');
var url = require('url');

var urlObject = url.parse('https://awis.amazonaws.com/api?Action=UrlInfo&Url=${website}&ResponseGroup=Rank');
console.log(urlObject);

const options = {
  host: urlObject.host,
  protocol: urlObject.protocol,
  path: urlObject.path,
  headers: {
    'Authorization': 'some-key',
    'Accept': 'application/xml',
    'Content-Type': 'application/xml'
  }
};


https.get(options, resource => {
    resource.setEncoding('utf8');
    resource.on('data', function(data) {
      // results += JSON.parse(data);
      results += data;
    });
    resource.on('end', function() {
      callback(null, results);
    });
    resource.on('error', function(err) {
      callback(err);
    });
  });
}