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

Curl 通过doPost将数据传输到GAS不起作用,curl,google-apps-script,Curl,Google Apps Script,我想通过curl/doPost从基于php的数据库系统向googleapps引擎提交一些简单的数据。我们的目标是让GAS在用户访问web应用时执行应用程序,任何拥有谷歌账户的人都可以访问该应用程序 在PHP系统端,我有以下代码来发送数据: // Get cURL resource // $curl = curl_init(); // Set some options curl_setopt_array($curl, array( CURLOPT_URL => 'https://scrip

我想通过curl/doPost从基于php的数据库系统向googleapps引擎提交一些简单的数据。我们的目标是让GAS在用户访问web应用时执行应用程序,任何拥有谷歌账户的人都可以访问该应用程序

在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';
在气体方面,我有以下代码来接收数据:

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中的脚本使用以下选项部署时,代码才能正常工作:executetheappas:设置为我自己。任何人都可以访问该应用程序,即使是匿名的。如果有人想测试代码,您还必须在php.ini中添加一些行,并在计算机上保存cacert.pem文件:

[curl]
curl.cainfo="C:/[path to]/cacert.pem"
CURLOPT_SSL_VERIFYPEER=1
如果我切换了部署选项,则将应用程序执行为:对于访问web应用程序的用户,以及谁有权访问该应用程序,则该应用程序将不再工作。屏幕上将显示以下内容:

通过cURL-to-google-apps脚本发送https请求后,会出现一个登录屏幕,供用户登录到谷歌。chrome中的标签名为Meet Google。它说,登录继续谷歌驱动。整个登录屏幕都是英文的,我是德国人。之后,我输入我的私人谷歌帐户的登录信息,并按下登录按钮。然后出现第二个登录屏幕。chrome中的标签名为Google Drive。上面写着Zur Nutzung von Google Drive anmelden翻译:请登录进入Google Drive。。然后我第二次输入相同的登录信息,然后按anmelden按钮翻译:登录。接下来发生的事情是,应用程序脚本的URL出现在chrome中。该选项卡的标题为“费勒翻译:错误”。在窗口中,我可以阅读SKcript Funktion nicht gefunden:doGet translation:Script function not found:doGet

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

非常欢迎提供一些帮助

几个月后,我还在研究这个问题

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

通过这种方式,可以通过PHP中的google api调用访问登录的google用户。所以我必须用PHP编写所有代码。但这不是我想要的

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

在网上搜索了几个小时后,我觉得这是不可能的


任何提示都是非常受欢迎的。

您在问题细节中几乎已经回答了。应用程序脚本需要配置为以您的身份运行并具有匿名访问权限。否则,您如何期望来自服务器的post调用在您尝试的其他条件下工作?
其他模式下的身份验证要求另一端有一个浏览器,该浏览器的用户授权访问其帐户,以便脚本1知道与谁交谈,脚本2获得对这些用户资源的请求访问权。

实际上可以通过从doGet webapp为预授权用户发送正确的cookie来伪造该用户,但其超出此问题范围。例如,我想在当前登录的用户帐户中创建一封电子邮件,该用户正在访问我的脚本。然后应该发生以下情况:GAS应该询问实际登录的google用户是否愿意授权我的脚本访问他的电子邮件帐户。用户说“是”后,脚本将能够创建电子邮件。我已经在网上看过好几次这个过程了,但是我不知道如何使用doPost来实现这个过程。为什么它与doGet一起工作,而与doPost不一起工作?