通过doPost将数据传输到GAS确实不起作用

时间:2015-04-18 05:51:49

标签: curl google-apps-script

我想通过curl / doPost从基于php的数据库系统向谷歌应用引擎提交一些简单的数据。目标是GAS以访问Web应用程序的用户身份执行应用程序,并且任何人(拥有Google帐户)都可以访问该应用程序。

在PHP系统方面,我有以下代码发送数据:

// Get cURL resource
// 
$curl = curl_init();
// Set some options
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://script.google.com/macros/s/AKfycbw-BksmkTsn_KEX40EhzfEulE-rJsUmlbIjUtW9PrTRMQLyiA/exec',
CURLOPT_POST => 1,
CURLOPT_FOLLOWLOCATION => 1,
CURLOPT_SSL_VERIFYPEER  => 1,
CURLOPT_POSTFIELDS => array(
   'firstname' => 'John',
   'lastname' => 'Miller'
)
));

// Send the request, save response to $resp
$resp = curl_exec($curl);
//echo curl_error($curl);

// Show response
echo $resp;

// Close request to clear up some resources
curl_close($curl);
//echo 'curl closed';

在GAS方面,我有以下代码来接收数据:

function doPost(e) {

  var parameter
  var wert

  for (var i in e.parameter) {
    parameter = i;
    wert =  e.parameter[i];

    if (parameter == "firstname") {var firstname = wert;}    
    if (parameter == "lastname") {var lastname = wert;}

  }


  //Return  
  return ContentService.createTextOutput("The name is: " + firstname + " " + lastname);

}

如果使用以下选项部署GAS中的脚本,则代码才能正常工作:"执行应用程序:"被设置为"我自己"。 "谁有权访问该应用程序"设置为"任何人,甚至匿名"。如果有人想测试代码,你还需要在php.ini中添加一些行并在你的计算机上保存一个" cacert.pem" -file:

[curl]
curl.cainfo="C:/[path to]/cacert.pem"
CURLOPT_SSL_VERIFYPEER=1

如果我切换部署选项"执行应用程序:"到"用户访问网络应用程序"和#34;谁有权访问该应用程序"是对任何人"它不再起作用了。屏幕上显示以下内容:

通过cURL将https-request发送到google apps脚本后,会出现登录屏幕,供用户登录google。 chrome中的标签名为" Meet Google"。它表示"登录以继续使用Google云端硬盘"。整个登录界面都是英文(我是德国人)。之后,我输入了我的私人Google帐户的登录信息,然后按"登录" - 按钮。之后会出现第二个登录屏幕。 chrome中的标签标题为" Google Drive"。它说" Zur Nutzung von Google Drive anmelden" (翻译:"请登录访问谷歌硬盘。")。然后我第二次输入相同的登录信息并按下" anmelden" -button(翻译:"登录")。接下来发生的事情是应用程序脚本的URL显示在chrome中。标签名为" Fehler" (翻译:"错误")。在窗口中我可以阅读" Skript-Funktion nicht gefunden:doGet" (翻译:"未找到脚本功能:doGet")。

我无法理解谷歌应用脚​​本的行为。特别是我无法理解谷歌为什么要求" doGet",尽管肯定有一个" doPost"在应用程序脚本中。

非常欢迎一些帮助。


几个月后,我仍然在研究这个问题。

我在google开发者控制台中创建了一个项目,并将应用脚本连接到此项目。

这样就可以通过PHP的谷歌api调用访问登录的谷歌用户。所以我必须在PHP中进行所有编码。但这不是我想要的。

我想通过谷歌应用脚​​本访问当前登录的谷歌用户gmail /驱动器等。我只想通过PHP传输一些数据。

在网上搜索了几个小时之后,在我看来这是不可能的。

任何提示都会非常受欢迎。

1 个答案:

答案 0 :(得分:0)

您的问题详细信息中几乎已经回复了它。应用程序脚本需要配置为以您和匿名访问方式运行。否则,你如何期待你的" post"从服务器调用您正在尝试的其他配置? 在其他模式下进行身份验证需要另一端的浏览器以及授权访问其帐户的用户,以便脚本1)知道与谁通话以及2)获取对这些用户资源的请求访问权。