如何使用doPost(请求)在应用程序脚本中访问帖子请求的正文

时间:2012-10-18 13:54:14

标签: google-apps-script

我需要在Google App Script中访问帖子请求的原始主体。我看到有类似

的东西
function doPost(request) {
  request.contentLength
}

实际上返回请求正文的原始内容的正确长度。所以我认为必须有一些东西可以得到完整的身体,例如作为一个字符串。

我不希望访问可能使用post传输的表单字段参数。

7 个答案:

答案 0 :(得分:8)

Release Notes of May 9, 2013开始,使用 request.postData.getDataAsString()

function doPost(request) {
    var jsonString = request.postData.getDataAsString();
    var jsonData = JSON.parse(jsonString);
    sheet.appendRow([ 'Data1:' , jsonData.Data1 ]); // Just an example
}

答案 1 :(得分:4)

我知道这个问题已经过时了,但很多事情都发生了变化,Google现在已经提供了这个问题。您可以使用以下方式轻松访问doPost(e)的POST请求正文

e.postData.contents

如果要解析传入的JSON,请使用:

JSON.parse(e.postData.contents)

答案 2 :(得分:1)

您可以通过从参数创建Blob来访问帖子的原始正文。然后,您可以在Blob对象上调用各种方法,例如getBytes()或getDataAsString()。列出的函数为here

function doPost(event) {
  var contentBlob = event.parameter.thefile;
  var contentAsString = contentBlob.getDataAsString();
  var bytes = contentBlob.getBytes();
  // do something with the contents ...
}

答案 3 :(得分:1)

我认为目前无法访问POST主体,比如实现REST服务。我为此提交了enhancement request;如果你偶然发现了这个问题,请随时对它进行投票,以便对该问题进行投票。

答案 4 :(得分:1)

这也应该有用。

function doPost(e) {

  if(typeof e !== 'undefined')
    Logger.log(e.parameter);

}

答案 5 :(得分:0)

找出您有权访问的所有内容的最简单方法是打印出请求对象。

function doPost(request) {
  Logger.log(request); 
}

然后对脚本的URL执行POST以查看日志内容

答案 6 :(得分:0)

根据您尝试执行的操作的性质以及您对发布请求的起源有何控制权,您可以与Drive API集成。如果帖子数据可以作为文件(例如包含原始JSON数据)发送到用户的云端硬盘帐户,那么您的脚本可以找到该文件,加载其内容,随意执行任何操作(例如,将其放在电子表格中) ),并可选择废弃Drive文件。当然,这假定您可以控制发布请求的发送方式。工作流程可能涉及:

  1. 客户端将带有数据的发布请求发送到用户的云端硬盘帐户(标签或名称文件,以便日后轻松识别)
  2. 完成Drive File创建后,客户端使用参数“method = consumeData”或类似
  3. 向您的脚本发送请求
  4. 您的脚本使用DocList服务检查用户的云端硬盘帐户,并检索为您的脚本上传的所有文件
  5. 我还没有尝试过,但是应该可以使用!