Http Google应用程序脚本:使用cURL测试doPost()

Http Google应用程序脚本:使用cURL测试doPost(),http,curl,google-apps-script,Http,Curl,Google Apps Script,我已经创建了一个非常基本的谷歌应用程序脚本。这是我的doPost()和doGet(): 我已使用新版本部署了该应用程序。它设置为以我的身份运行,但每个人都可以运行它,包括匿名 我通过从命令行运行cURL来测试端点,对于GET,它可以按预期工作: 请求- curl -L https://script.google.com/macros/s/AKfycbxYxgMfMkR6hGI5UO2Gn8tg369oqsy_W41-olb0Do1y8gOjaNvm/exec curl -H "Content-

我已经创建了一个非常基本的谷歌应用程序脚本。这是我的
doPost()
doGet()

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

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

请求-

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

{"result":"Hello world!"}
Sorry, unable to open the file at this time.

Please check the address and try again.
但对于邮政:

请求-

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

{"result":"Hello world!"}
Sorry, unable to open the file at this time.

Please check the address and try again.
正如您从命令中看到的,为了达到这一目的,我必须稍微进行一些操作:包括伪数据、添加内容长度头,以及添加-L标志以使用重定向


然而,我被卡住了。为什么它不能“找到文件”?为什么它认为有一个文件?

我想你需要发送数据

这是有效的(我得到了
{“结果”:“收到了POST请求!”}
):

正如这一点:

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

我仍然不确定这是否仅仅是我没有完全理解curl/POST的工作原理,但这里有一个开放的Google问题跟踪问题,可能是相关的:谢谢+1000在我的头撞了一个小时后,这个答案终于救了我。下面是它工作的原因(可以从
curl-v
中看到):在这两种情况下,最初的请求都是POST。但是对于
-xpost
,随后的请求(获取响应的重定向应该是GET)也被强制作为POST,并且失败。您将注意到,脚本确实在运行,但响应失败并出现此错误。这只是curl的一些奇怪的细节。澄清一下:解决方案基本上是消除导致重定向问题的
-X POST
。@dkamins感谢您的跟进,很高兴终于知道为什么会发生这种情况!基本上,当您使用-d/--raw data时,您会提供足够的信息来推断您正在发出POST请求。如果您显式地告诉curl-X/--request POST,那么您的意思是使用POST方法,而不考虑重定向(您应该在哪里使用GET)。因此,通过删除显式“-X POST”实际上会发送一个POST请求,然后在使用“-d/--data raw”时点击302时会发送一个GET::)以下是一些有用的阅读材料: