将cURL与PHP文件中的Google Apps Script Web App一起使用时遇到问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将cURL与PHP文件中的Google Apps Script Web App一起使用时遇到问题相关的知识,希望对你有一定的参考价值。

我试图弄清楚为什么此代码不能与Google Apps Script网络应用程序URL一起使用,但可以与随机网络API URL一起使用?

第一个代码块从虚拟API获取数据。第二个代码块从Google Apps脚本网络应用程序网址返回任何内容。代码中唯一的区别是$ url变量值。

GAS应用程序设置为Web应用程序,因此任何人,即使是匿名用户也可以访问它(下面的屏幕截图)。如果我直接转到GAS网址GAS Output,它将返回JSON。

[Google Apps脚本代码在下面的第三个代码块中。

有什么想法吗?

由于田奈池,问题解决了!!工作代码粘贴在问题的底部。

enter image description here

第一个代码块

<?php
// Initiate curl session in a variable (resource)
$curl_handle = curl_init();

$url = "http://dummy.restapiexample.com/api/v1/employees";

// Set the curl URL option
curl_setopt($curl_handle, CURLOPT_URL, $url);

// This option will return data as a string instead of direct output
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);

// Execute curl & store data in a variable
$curl_data = curl_exec($curl_handle);

curl_close($curl_handle);

// Decode JSON into PHP array
$user_data = json_decode($curl_data);

// Print all data if needed
print_r($user_data);

?>

第二代码块

<?php
// Initiate curl session in a variable (resource)
$curl_handle = curl_init();

$url = "https://script.google.com/macros/s/AKfycbyWSDzUyFa41fu_6QWP7h8ToklwWysGZsuSPaRnu649DmPNYG8/exec";

// Set the curl URL option
curl_setopt($curl_handle, CURLOPT_URL, $url);

// This option will return data as a string instead of direct output
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);

// Execute curl & store data in a variable
$curl_data = curl_exec($curl_handle);

curl_close($curl_handle);

// Decode JSON into PHP array
$user_data = json_decode($curl_data);

// Print all data if needed
print_r($user_data);

?>

第一个代码块:GAS代码

function doGet(e) 
  var data = 
    status: 'success',
    dataSet: 'Some Info'

  ;

  var output = JSON.stringify(data);
  return ContentService.createTextOutput(output).setMimeType(ContentService.MimeType.JSON);

工作代码,谢谢您Tanaike !!

<?php
// Initiate curl session in a variable (resource)
$curl_handle = curl_init();

$url = "https://script.google.com/macros/s/AKfycbyWSDzUyFa41fu_6QWP7h8ToklwWysGZsuSPaRnu649DmPNYG8/exec";



// Set the curl URL option
curl_setopt($curl_handle, CURLOPT_URL, $url);

// was an update from my stack overflow question.
curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true); //https://stackoverflow.com/questions/59780986/trouble-using-curl-with-google-apps-script-web-app-in-a-php-file/59781600#59781600

// This option will return data as a string instead of direct output
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true);

// Execute curl & store data in a variable
$curl_data = curl_exec($curl_handle);

curl_close($curl_handle);

// Decode JSON into PHP array
$user_data = json_decode($curl_data);

// Print all data if needed
print_r($user_data);

?>
答案
  • 您想使用php访问Web Apps。
  • 您想知道运行脚本时不显示任何值的原因。

如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。

您遇到的问题的原因:

在您的Web Apps中,Execute the app as:Who has access to the app:分别设置为User accessing the web appAnyone。在这种情况下,当您访问Web Apps时,需要使用您的访问令牌。因此,在脚本中会发生错误。但是使用curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true)。这样,没有显示任何值。删除curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, true)后,在您的脚本中,重定向页面将作为html数据检索。

为了避免此问题,如何进行以下修改?

模式1:

在您的脚本中,似乎未使用访问令牌。在这种情况下,请将Execute the app as:Who has access to the app:分别设置为MeAnyone, even anonymous。在这种情况下,不需要使用访问令牌。

为此,请在脚本中添加以下脚本以访问Web Apps。

curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);

通过以上流程,您可以使用php脚本访问Web Apps并从Web Apps中检索值。

模式2:

如果要访问以Execute the app as:Who has access to the app:分别作为User accessing the web appAnyone部署的Web Apps,则需要使用访问令牌。

为此,请在脚本中添加以下脚本以访问Web Apps。

curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);
$header = ['Authorization: Bearer ###your access token###'];
curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $header);

注意:

  • 在上述条件下,如果您(作为Web Apps的所有者)使其他用户在此条件下访问您的Web Apps,请与用户共享已部署Web Apps的GAS项目。这样,用户可以使用用户的访问令牌访问Web Apps。

注意:

  • 当您在Google Apps脚本端修改了Web Apps脚本时,请重新部署Web Apps作为新版本。这样,最新脚本将反映到Web Apps。请注意这一点。

参考:

如果我误解了你的问题,而这不是你想要的方向,我深表歉意。

另一答案

我尝试在隐身窗口中访问Apps脚本URL,并将其重定向到Google登录提示。

当您为User accessing the web app选项使用Execute the app as设置时,该脚本将毫无疑问地以访问它的用户身份运行。因此,使用您当前的设置,用户需要登录Google帐户才能成功执行该应用程序

如果将Execute the app as选项切换为Me (<you address>),则会为Anyone, even anonymous选项提供一个附加选项Who has access to this app。这是启用真正匿名访问应用程序的唯一方法。

请参见the permissions documentation以获取更多详细信息。

以上是关于将cURL与PHP文件中的Google Apps Script Web App一起使用时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

用于将 google drive 中的文件名列表与 google sheet 列中的名称列表进行比较的 Apps 脚本,以将新文件从驱动器添加到工作表

如何通过 PHP 使用 curl 上传文件 [关闭]

将 Google Apps 脚本中的 CSV 文件上传到 BigQuery 表 - 行中的恶意逗号

将 Google Apps 表单与表格连接起来

使用 Google Apps 脚本的 Facebook API 批处理请求

使用 HtmlService 使用 Google Apps 脚本上传文件