9

我需要访问 Google App Script 中发布请求的原始正文。我看到有类似的东西

function doPost(request) {
  request.contentLength
}

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

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

4

7 回答 7

15

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

e.postData.contents

如果要解析传入的 JSON,请使用以下命令:

JSON.parse(e.postData.contents)
于 2017-04-05T06:32:40.967 回答
11

2013 年 5 月 9 日的发行说明中,使用request.postData.getDataAsString()

function doPost(request) {
    var jsonString = request.postData.getDataAsString();
    var jsonData = JSON.parse(jsonString);
    sheet.appendRow([ 'Data1:' , jsonData.Data1 ]); // Just an example
}
于 2013-07-08T17:33:08.467 回答
1

我认为目前无法访问 POST 正文,例如实现 REST 服务。我为此提交了增强请求;如果您偶然发现了这个,请随时为它加注星标以对该问题进行投票。

于 2012-12-05T02:39:26.470 回答
1

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

function doPost(event) {
  var contentBlob = event.parameter.thefile;
  var contentAsString = contentBlob.getDataAsString();
  var bytes = contentBlob.getBytes();
  // do something with the contents ...
}
于 2012-10-24T21:02:20.460 回答
1

这也应该有效。

function doPost(e) {

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

}
于 2015-05-19T19:54:29.373 回答
0

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

  1. 客户将带有数据的发布请求发送到用户的云端硬盘帐户(标签或名称文件以便以后轻松识别)
  2. 驱动器文件创建完成后,客户端使用参数“method=consumeData”等向您的脚本发送请求
  3. 您的脚本使用 DocList 服务检查用户的云端硬盘帐户并检索为您的脚本上传的所有文件

我还没有尝试过,但应该可以!

于 2013-04-20T17:47:26.553 回答
0

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

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

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

于 2012-10-18T15:55:45.687 回答