我正在努力做最少的事情,只是为了让它发挥作用。
这是我的谷歌脚本:
function doPost(e) {
return ContentService.createTextOutput(JSON.stringify(e.parameter));
}
这是我的 PHP 代码:
$url = 'https://script.google.com/a/somedomain.com/macros/s/### script id ###/exec';
$data['name'] = "Joe";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
$error = curl_error($ch);
执行这个,$result
is true
.
如果我取消注释CURLOPT_RETURNTRANSFER
line, $result
=
<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Bad Request</H1>
<H2>Error 400</H2>
</BODY>
</HTML>
$error
总是空的。
我会用doGet()
但我需要发送一些相当大的 POST,这将超出 GET 可以处理的范围。
如何发布到 Google 脚本并返回数据?
- - - 更新 - - -
我刚刚了解到我的首席开发人员前一段时间尝试过此操作,并在返回时得出了 doPost() 错误的结论,所以显然这不仅仅是我。我的看法是,谷歌根本不够可靠,无法使用。我希望有人能证明我错了。
------ 更新 2 - 修复 ---------
显然这是问题所在:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
需要是:
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
不知道为什么http_build_query()
导致它出错。