Google Apps 脚本:使用 cURL 测试 doPost()

Mat*_*ens 5 curl http google-apps-script

我创建了一个非常基本的 Google Apps 脚本。这是我的doPost()doGet()

function doPost(e) {
  return respond(JSON.stringify({result: "Hello world!"}));
}

function doGet(e) {
  return respond(JSON.stringify({result: "Hello world!"})); 
}

function respond(response) {  
  return ContentService
  .createTextOutput(response)
  .setMimeType(ContentService.MimeType.JSON)
}
Run Code Online (Sandbox Code Playgroud)

我已经使用新版本部署了该应用程序。它设置为以我的身份运行,但每个人都可以运行它,包括匿名。

我正在通过从命令行运行 cURL 来测试端点,对于 GET,它按预期工作:

要求 -

curl -L https://script.google.com/macros/s/AKfycbxYxgMfMkR6hGI5UO2Gn8tg369oqsy_W41-olb0Do1y8gOjaNvm/exec
Run Code Online (Sandbox Code Playgroud)

回复 -

{"result":"Hello world!"}
Run Code Online (Sandbox Code Playgroud)

但对于邮政:

要求 -

curl -H "Content-Length: 0" -D "p=p" -X POST -L https://script.google.com/macros/s/AKfycbxYxgMfMkR6hGI5UO2Gn8tg369oqsy_W41-olb0Do1y8gOjaNvm/exec
Run Code Online (Sandbox Code Playgroud)

回复 -

Sorry, unable to open the file at this time.

Please check the address and try again.
Run Code Online (Sandbox Code Playgroud)

正如您从命令中看到的,我必须进行一些操作才能达到此目的:包括虚拟数据、添加内容长度标头以及添加 -L 标志以使用重定向。

然而,我被困住了。为什么无法“找到文件”?为什么它认为有一个文件?

Tim*_*hns 4

我怀疑您需要发送数据。

这有效(我得到了{"result":"POST request received!"}):

curl -H 'Content-Type: application/json' -d {} -L https://script.google.com/macros/s/AKfycbxYxgMfMkR6hGI5UO2Gn8tg369oqsy_W41-olb0Do1y8gOjaNvm/exec
Run Code Online (Sandbox Code Playgroud)

就像这样:

curl -d "" -L https://script.google.com/macros/s/AKfycbxYxgMfMkR6hGI5UO2Gn8tg369oqsy_W41-olb0Do1y8gOjaNvm/exec
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你!!!!+1000 在我为此苦苦思索一个小时后,这个答案终于救了我。这就是它起作用的原因(如使用“curl -v”所示):在这两种情况下,初始请求都是 POST。但是使用“-X POST”,后续请求(用于获取应该是 GET 的响应的重定向)也被强制作为 POST 并失败。您会注意到该脚本实际上确实运行了,但响应因此错误而失败。这只是卷曲的一些奇怪的细节。 (2认同)
  • 澄清一下:解决方案基本上是消除导致重定向问题的“-X POST”。 (2认同)
  • 本质上,当您使用 -d/--raw-data 时,您为curl 提供了足够的信息来推断您正在发出 POST 请求。如果您明确告诉curl -X/--request POST,那么您就是在说使用POST 方法,而不管重定向(您应该使用GET)。因此,通过删除显式的“-X POST”实际上会发送一个 POST 请求,然后在使用“-d/--data-raw”时遇到 302 时发送 GET :) 这里有一些有用的阅读材料:https:// stackoverflow.com/questions/60845042/curl-redirect-302-not-changing-the-method-from-post-to-get https://ec.haxx.se/http/http-redirects (2认同)