我正在尝试将 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] 删除。
我来说两句