【问题标题】:Google Apps Script: testing doPost() with cURLGoogle Apps 脚本:使用 cURL 测试 doPost()
【发布时间】:2018-04-02 20:22:03
【问题描述】:

我创建了一个非常基本的 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)
}

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

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

请求 -

curl -L https://script.google.com/macros/s/AKfycbxYxgMfMkR6hGI5UO2Gn8tg369oqsy_W41-olb0Do1y8gOjaNvm/exec

响应 -

{"result":"Hello world!"}

但对于 POST:

请求 -

curl -H "Content-Length: 0" -D "p=p" -X POST -L https://script.google.com/macros/s/AKfycbxYxgMfMkR6hGI5UO2Gn8tg369oqsy_W41-olb0Do1y8gOjaNvm/exec

响应 -

Sorry, unable to open the file at this time.

Please check the address and try again.

正如您从命令中看到的那样,我不得不稍微操作一下才能做到这一点:包括虚拟数据、添加内容长度标头以及添加 -L 标志以使用重定向。

但是,我被卡住了。为什么它不能“找到文件”?为什么它认为有文件?

【问题讨论】:

    标签: http curl google-apps-script


    【解决方案1】:

    我怀疑您需要发送数据。

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

    curl -H 'Content-Type: application/json' -d {} -L https://script.google.com/macros/s/AKfycbxYxgMfMkR6hGI5UO2Gn8tg369oqsy_W41-olb0Do1y8gOjaNvm/exec
    

    这样:

    curl -d "" -L https://script.google.com/macros/s/AKfycbxYxgMfMkR6hGI5UO2Gn8tg369oqsy_W41-olb0Do1y8gOjaNvm/exec
    

    【讨论】:

    • 我仍然不确定这是否只是我没有完全理解 curl/POST 的工作原理,但这里有一个可能相关或相关的开放 Google 问题跟踪器问题:issuetracker.google.com/issues/62196692
    • 谢谢!!!! +1000 在这个问题上敲了一个小时后,这个答案终于救了我。这就是它起作用的原因(从curl -v 可以看出):在这两种情况下,初始请求都是 POST。但是对于-X POST,后续请求(用于获取应该是 GET 的响应的重定向)也被强制作为 POST 并且失败。您会注意到该脚本确实运行了,但响应失败并出现此错误。这只是 curl 的一些奇怪的细节。
    • 并澄清一下:解决方案基本上是消除导致重定向问题的-X POST
    • @dkamins 感谢您的跟进,很高兴终于知道为什么会发生这种情况!
    • 基本上,当您使用 -d/--raw-data 时,您会向 curl 提供足够的信息来推断您正在发出 POST 请求。如果您明确告诉 curl -X/--request POST ,那么您说的是使用 POST 方法而不管重定向(您应该在哪里使用 GET)。因此,通过删除显式的“-X POST”实际上会发送一个 POST 请求,然后在使用“-d/--data-raw”时遇到 302 时发送一个 GET :) 这里有一些有用的阅读材料:stackoverflow.com/questions/60845042/…@ 987654323@
    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    相关资源
    最近更新 更多