【问题标题】:receive parameters from another server POST request using apps script使用应用程序脚本从另一个服务器 POST 请求接收参数
【发布时间】:2016-09-29 03:41:49
【问题描述】:

我有一些关于使用应用程序脚本的技术问题。 第三方服务器在 POST 方法中向我发送参数,请求如下所示:https://script.google.com/macros/s/AKfycbyJYVLO46T1LnQKktaMrROclCOqgawcVfZaRbm_oXfJaMIYcPj8/exec?value=$postback_params_test$(所以我需要接收 $postback_params_test$ 作为值)

我使用了 doPost(e) 函数但没有成功,我认为问题是因为应用程序脚本是基于客户端 java 脚本的,它不能与服务器语言对话,对吗?还是有一个选项可以通过应用程序脚本来完成?

我的代码:

function doPost(e){
var param = e.parameter.value;
var doc = SpreadsheetApp.openById("106jpepwZZWXtpO4Id45qmJovV68q_DIqpEmTQ0khf4E");
var cell = doc.getRange('a1');
cell.setValue(param);
}

8.6

图片添加: enter image description here

【问题讨论】:

  • 您可以使用 Apps 脚本接收 POST 请求,虽然 Apps 脚本是一种基于 javascript 的语言,但它运行的是服务器端(在 Google 的服务器上)而不是客户端。如果您需要解决此问题的帮助,则需要显示您尝试过的 doPost(e) 代码,否则人们只能猜测解决方案。
  • 感谢您的回复,我将代码放在主消息中。网络应用程序设置也由:“我”执行,谁可以访问:“任何人甚至匿名”,当我从外部服务器发送测试回发时,我进入 chrome 开发工具:“远程服务器返回错误: (403) Forbidden.\"}"}",当我更改谁可以访问“任何人”时,我会得到“responseStatusCode\:\"200"”,但电子表格中没有任何更改
  • 将其更改回您获得 200 响应代码的设置。出于测试目的,您应该做的是使用 ContentServices 返回某种内容。添加一个 try catch 并在成功或失败发生时返回一些东西。现在通过观察你上面的 doPost 代码,我相信有一个错误导致了错误。您将 SpreadsheetApp.openById() 分配给变量 doc,然后尝试从该变量调用 getRange。您应该与 getRange() 一起调用 getActive() 或 getActiveSheet()。我相信内容服务会告诉你有一个错误。

标签: google-apps-script google-apps


【解决方案1】:

当部署为具有“执行身份:我”和“有权访问该应用的人:任何人,甚至匿名”设置的网络应用时,您的示例代码可以正常工作。

您是否对代码进行了授权?在将其作为 Web 应用程序运行之前,您必须在脚本编辑器中手动运行一次 doPost()(或其他函数),以便您可以授予脚本适当的权限。

如果不是授权问题,您可以添加 MailApp.sendemail() 调用来帮助您进行故障排除。

function doPost(e) {
    MailApp.sendEmail('YOUR-EMAIL HERE','TEST doPost()',JSON.stringify(e));

这样您将收到一封电子邮件,其中显示来自其他服务器的原始请求。

请务必在添加 MailApp 行后手动重新运行脚本,以便您可以授权它发送电子邮件并更新已发布的版本。

【讨论】:

  • 是的,我就是这么做的。我尝试通过hurl.it 发送请求并且它也有效,并且从这台服务器我得到了 403 禁止响应,也许这是他们的问题,我不知道但听起来很奇怪,我不是唯一一个使用这台服务器进行测试的人。运行脚本时出现此错误,但我告诉它它的正常行为 - “TypeError:无法从未定义中读取属性“参数”。(第 2 行,文件“代码”)”
  • 是的,这很正常,因为当您手动运行 doPost() 时,您没有将 HTTP 请求详细信息传递给参数“e”,因此函数中未定义“e”。如果从 hurl.it 发送有效,那么来自该服务器的请求会有所不同。您可以使用 MailApp.sendemail() 来帮助您解决问题,我会更新我的答案。
  • 我刚刚注意到,你从另一台服务器得到一个 403,这表明请求完全不正确,例如它转到了错误的 URL 或其他什么,或者它可能不起作用使用 HTTPS?如果您能弄清楚如何获得 200 响应,那么 MailApp 提示将派上用场。
  • 我不知道为什么会得到 403,我还添加了我在发送请求后从服务器看到的截图链接。也许它与缓存是“私有”且内容类型是“应用程序/json”的事实有关? (我打开了提琴手)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多