无法将POST请求发送到Google Apps脚本

时间:2019-07-18 22:17:04

标签: http google-apps-script

我正尝试将Google Apps脚本部署为网络应用,但是尽管我对执行GET请求没有问题,但在POST请求方面遇到了麻烦。

我的代码很简单:

function doGet(request) {
    var result = JSON.stringify({ data: 'Thanks, I received the GET request' });
    return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}

function doPost(request) {
    var result = JSON.stringify({ data: 'Thanks, I received the POST request' });
    return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}

我通过“将应用程序执行为:我”和“谁有权访问该应用程序:任何人,甚至是匿名用户”来部署该Web应用程序。每次进行一些更改时,我都会重新部署一个新版本(“项目版本:新”)。

发布后,我的curl GET请求可以正常运行:

> curl -L https://script.google.com/macros/s/$SCRIPT_ID/exec
{"data":"Thanks, I received the GET request"}

但是,我的POST请求(curl -L -XPOST https://script.google.com/macros/s/$SCRIPT_ID/exec)仅向我显示了一个通用的Google HTML页面,上面写着“抱歉,暂时无法打开文件。请检查地址,然后重试”。

我尝试发送一些数据并提供内容类型,但没有任何变化。我还尝试将输出类型更改为ContentService.createTextOutput("OK"),但是它也不起作用。奇怪的是,删除doPost会将错误消息更改为“找不到脚本功能:doPost”。如果有什么不同,此脚本将附加到Google电子表格中。

我是否需要为POST请求的脚本赋予特殊的权限?

1 个答案:

答案 0 :(得分:2)

似乎问题出在我使用curl时,使用-XPOST与不使用之间存在细微的差别。正如Tanaike所建议,更改为:

curl -L -XPOST https://script.google.com/macros/s/$SCRIPT_ID/exec

curl -L -d '' https://script.google.com/macros/s/$SCRIPT_ID/exec

解决了该问题。即使curl在我使用-XPOST和有效负载进行请求时,虽然curl有用地表示“不必要使用-X或--request,但已经推断出POST”,但在存在重定向的情况下其行为是不同的。 -XPOST强制使用POST作为方法进行重定向后的所有后续请求。另一方面,如果我未指定-XPOST,则第一个POST之后的请求将作为GET请求发出。我不知道这是否是curl的预期行为,但这肯定是不直观的。

相关问题