3

互联网上没有提到这个特定问题或解决方案,所以这里是:

doGet()我的应用程序包含以下doPost()功能:

function doGet (e){return ContentService.createTextOutput("User says: "+JSON.stringify(e))}
function doPost(e){return ContentService.createTextOutput("User says: "+JSON.stringify(e))}

GET http://*published URL*/+params返回:

User says:     
{
  "queryString":"testparamA=abc&testparamB=bcd&testparamC=cde",
  "parameter":
    {
      "testparamA":"abc",
      "testparamB":"bcd",
      "testparamC":"cde"
    },
  "contextPath":"",
  "parameters":
    {
      "testparamA":["abc"],
      "testparamB":["bcd"],
      "testparamC":["cde"]
    },
  "contentLength":-1
}

鉴于,POST http://*published URL*/+params返回:

User says:
{
  "queryString":null,
  "parameter":{},
  "contextPath":"",
  "parameters":{},
  "contentLength":0
}

我的目标是访问POST参数。POST但是在使用该方法传输时,似乎有些东西阻止了脚本获取它们。GET似乎工作得很好。

我错过了什么,解决方案是什么?

4

3 回答 3

8

使用您发布的完全相同的代码,POST 和 GET 对我来说非常好。我的猜测是您没有正确测试 POST。

这是我发布的网址。后面的代码是您的示例的副本/粘贴 -

https://script.google.com/macros/s/AKfycbzWZv9WUp7rUtOxZhhwuXPpuNXuvPGpiHyrcYrPeNLiusOWzazo/exec

http://hurl.it(浏览器中的简单 REST 测试器)对其进行测试,并且没有任何问题。

请求(确保检查跟随重定向) -

请求截图

响应(针对 GET 和 POST 的一次 ContentService URL 重定向后的响应)

回复截图

于 2012-11-28T04:21:20.307 回答
2

我认为这在某种程度上是意料之中的。当一个人这样做时HTTP GET,参数会在 url 上传递。当它是一个POST他们继续有效载荷,而不是网址。

尝试像这样调用帖子(应用程序脚本代码):

UrlFetchApp.fetch(scriptUrl, {method:'post', payload:'param1=value1&param2=value2'});
于 2012-11-28T02:16:14.643 回答
0

但是,我遇到了同样的问题。doGet(e)返回一个参数集合,但doPost(e)不返回。查看e脚本日志中的值:

DoGet 记录以下内容:

{queryString=param1=value1&param2=value2&param3=value3, 
parameter={param1=value1, param2=value2, param3=value3}, 
contextPath=, 
parameters={param1=[value1], param2=[value2], param3=[value3]},contentLength=-1}

DoPost 记录以下内容:

{queryString=lib=Ma1kfpb2uwfs976NQh3S0GV_Vnss8VuKo&appId=u33198874110&formId=xxxxxxxxxxxx&token=AJuLMu2XVXMgpvS-7l6mWLVDmxjYMA6ZEQ:1393694820550&gm1xs=&service=AKfycbzfP8gYQknL9dNG6SVf0LmPYy3xiEAtyFQ8AvJDwfs, 
parameter={gm1xs=, lib=Ma1kfpb2uwfs976NQh3S0GV_Vnss8VuKo, appId=u33198874110, param1=value1, formId=u33198874111, token=AJuLMu2XVXMgpvS-7l6mWLVDmxjYMA6ZEQ:1393694820550, param2=value2, param3=value3, service=AKfycbzfP8gYQknL9dNG6SVf0LmPYy3xiEAtyFQ8AvJDwfs},
contextPath=, contentLength=341}

因此,在doGet其中循环通过是微不足道的e.parameters,但在doPost您必须循环通过e.parameter,并处理您不关心的表单中的其他参数。

于 2014-03-01T18:03:22.870 回答