无法向 Google Apps 脚本发送 POST 请求

瑞·贡萨尔维斯

我正在尝试将 Google Apps 脚本部署为 Web 应用程序,但是虽然我在执行 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 页面,上面写着“抱歉,目前无法打开文件。请检查地址并重试”。

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

我是否需要专门为 POST 请求赋予脚本任何特殊权限?

瑞·贡萨尔维斯

问题似乎出在我对 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使用有效负载发出请求时有用地表示“不必要地使用 -X 或 --request,POST 已经被推断” ,但在存在重定向的情况下,它的行为是不同的。-XPOST强制使用 POST 作为方法进行重定向后的所有后续请求。另一方面,如果我不指定-XPOST,则第一个 POST 之后的请求将作为 GET 请求进行。我不知道这是否是 curl 的预期行为,但这肯定是不直观的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章