Json 使用Parse.Cloud.httpRequest无法为AWS请求设置正确的头?

Json 使用Parse.Cloud.httpRequest无法为AWS请求设置正确的头?,json,amazon-web-services,parse-platform,header,httprequest,Json,Amazon Web Services,Parse Platform,Header,Httprequest,在Parse.com上,我需要从CloudCode向AWS(Kinesis)发送httpRequest;它们是经过签名的,从浏览器端(扩展名)发送时,它们都可以工作。我在CloudCode中的请求中尝试了以下标题内容类型: "content-type": "application/json" AWS拒绝了它:{“Output”:{“uuuu type”:“com.amazon.coral.service#UnknownOperationException”,“message”:null},“V

在Parse.com上,我需要从CloudCode向AWS(Kinesis)发送httpRequest;它们是经过签名的,从浏览器端(扩展名)发送时,它们都可以工作。我在CloudCode中的请求中尝试了以下标题内容类型:

"content-type": "application/json"
AWS拒绝了它:{“Output”:{“uuuu type”:“com.amazon.coral.service#UnknownOperationException”,“message”:null},“Version”:“1.0”}

parse.cloud.httprequest拒绝了它:结果:未捕获错误:不知道如何将httprequest主体对象转换为application/x-amz-json-1.1。要发送原始字节,请将httpRequest正文分配给包含数据的缓冲区对象

AWS拒绝:请求失败,响应代码403

AWS文档到处都提到“application/x-amz-json-1.1”内容类型,我看不到任何替代方案。所以,我假设这是一条路,所以:

我如何要求Parse.Cloud.httpRequest使用这个X-AMZ-JSON头发送请求,但在“内部”使用“application/JSON”

更新:我尝试使用从节点获取的“http”和“xmlhttp”模块;但是没有一个有效——我很乐意尝试你的任何建议

更新:这是我的实际要求

Parse.Cloud.httpRequest({
  method: 'POST',
  url: awsKinesisUrl,
  headers: {
    "Authorization": concat_string,
    "action": "PutRecord",
    "acl": "public-read",
    'awsaccesskeyid': "__XXX__",
    "content-type": "application/x-amz-json-1.1",
    "dategenerated":  date_generated+"",
    "region": "eu-west-1",
    "version": "2013-12-02",
    "X-Amz-Date": date_generated_TZ+"",
    "X-Amz-Target": "Kinesis_20131202.PutRecords"

  },
  body: {
    body: http_req_body
  },
  success: function(httpResponse) {
    var message = httpResponse.text;
    res.render('json', {message: '{response:\''+message+'\'}' });                       
  },
  error: function(httpResponse) {
    var message = httpResponse.status;
    res.render('json', {message: '{response:\''+message+'\'}' });                       
  }
});                                                             

查看有关通过httpRequest发送原始字节的博文:

如果
http\u req\u body
是JS对象,则可以使用以下方法调用:

// Require can go at the global scope
var Buffer = require('buffer').Buffer;
Parse.Cloud.httpRequest({
  method: 'POST',
  url: awsKinesisUrl,
  headers: {
    "Authorization": concat_string,
    "action": "PutRecord",
    "acl": "public-read",
    'awsaccesskeyid': "__XXX__",
    "content-type": "application/x-amz-json-1.1",
    "dategenerated":  date_generated+"",
    "region": "eu-west-1",
    "version": "2013-12-02",
    "X-Amz-Date": date_generated_TZ+"",
    "X-Amz-Target": "Kinesis_20131202.PutRecords"
  },
  body: new Buffer(JSON.stringify(http_req_body))
}).always(function(httpResponse) {
  var message = httpResponse.text;
  res.render('json', {message: '{response:\''+message+'\'}' });                       
});
我还冒昧地用更新的Promise技术()替换了您的成功/错误回调。这不仅使您能够更轻松地管理多个API请求,而且还使您能够整合您正在为成功和错误条件重写的处理程序

Parse.Cloud.httpRequest({
  method: 'POST',
  url: awsKinesisUrl,
  headers: {
    "Authorization": concat_string,
    "action": "PutRecord",
    "acl": "public-read",
    'awsaccesskeyid': "__XXX__",
    "content-type": "application/x-amz-json-1.1",
    "dategenerated":  date_generated+"",
    "region": "eu-west-1",
    "version": "2013-12-02",
    "X-Amz-Date": date_generated_TZ+"",
    "X-Amz-Target": "Kinesis_20131202.PutRecords"

  },
  body: {
    body: http_req_body
  },
  success: function(httpResponse) {
    var message = httpResponse.text;
    res.render('json', {message: '{response:\''+message+'\'}' });                       
  },
  error: function(httpResponse) {
    var message = httpResponse.status;
    res.render('json', {message: '{response:\''+message+'\'}' });                       
  }
});                                                             
// Require can go at the global scope
var Buffer = require('buffer').Buffer;
Parse.Cloud.httpRequest({
  method: 'POST',
  url: awsKinesisUrl,
  headers: {
    "Authorization": concat_string,
    "action": "PutRecord",
    "acl": "public-read",
    'awsaccesskeyid': "__XXX__",
    "content-type": "application/x-amz-json-1.1",
    "dategenerated":  date_generated+"",
    "region": "eu-west-1",
    "version": "2013-12-02",
    "X-Amz-Date": date_generated_TZ+"",
    "X-Amz-Target": "Kinesis_20131202.PutRecords"
  },
  body: new Buffer(JSON.stringify(http_req_body))
}).always(function(httpResponse) {
  var message = httpResponse.text;
  res.render('json', {message: '{response:\''+message+'\'}' });                       
});