为了账号安全,请及时绑定邮箱和手机立即绑定

在 PHP 文件中将 cURL 与 Google Apps 脚本 Web App 一起使用时出现问题

在 PHP 文件中将 cURL 与 Google Apps 脚本 Web App 一起使用时出现问题

PHP
交互式爱情 2022-08-05 15:48:03
我试图弄清楚为什么这段代码不适用于Google Apps脚本网络应用网址,但它可以与随机的网络API网址一起使用?第一个代码块从虚拟 API 获取数据。第二个代码块不会从 Google Apps 脚本网络应用网址中返回任何内容。代码中唯一的区别是变量值$url。GAS应用程序设置为Web应用程序,因此任何人,即使是匿名者都可以访问它(下面的屏幕截图)。如果我直接转到GAS url GAS Output,它将返回JSON。Google Apps 脚本代码位于第三个代码块的下方。有什么想法吗?多亏了塔奈克,问题解决了!!粘贴在问题底部的工作代码。第一个代码块<?php// Initiate curl session in a variable (resource)$curl_handle = curl_init();$url = "http://dummy.restapiexample.com/api/v1/employees";// Set the curl URL optioncurl_setopt($curl_handle, CURLOPT_URL, $url);// This option will return data as a string instead of direct outputcurl_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 neededprint_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 optioncurl_setopt($curl_handle, CURLOPT_URL, $url);// This option will return data as a string instead of direct outputcurl_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 neededprint_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);}工作代码,谢谢田奈克!!<?php// Initiate curl session in a variable (resource)$curl_handle = curl_init();$url = "https://script.google.com/macros/s/AKfycbyWSDzUyFa41fu_6QWP7h8ToklwWysGZsuSPaRnu649DmPNYG8/exec";
查看完整描述

2 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

  • 您希望使用 php 访问 Web 应用。

  • 您想知道运行脚本时未显示任何值的原因。

如果我的理解是正确的,那么这个答案呢?请把这看作是几个可能的答案之一。

问题原因:

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

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

模式 1:

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

为此,请将以下脚本添加到脚本中以访问 Web 应用。

curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);

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

模式 2:

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

为此,请将以下脚本添加到脚本中以访问 Web 应用。

curl_setopt($curl_handle, CURLOPT_FOLLOWLOCATION, true);

$header = ['Authorization: Bearer ###your access token###'];

curl_setopt($curl_handle, CURLOPT_HTTPHEADER, $header);

注意:

  • 在上述条件下,如果你是 Web 应用的所有者,并且使用此条件让其他用户访问你的 Web 应用,请与用户共享部署 Web 应用的 GAS 项目。通过这种方式,用户可以使用用户的访问令牌访问 Web 应用。

注意:

  • 当您在 Google Apps 脚本端修改 Web Apps 脚本时,请将 Web Apps 重新部署为新版本。通过这种方式,最新的脚本将反映到 Web 应用。请小心这一点。


查看完整回答
反对 回复 2022-08-05
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

我尝试在隐身窗口中访问应用程序脚本URL,它重定向到Google登录提示。

使用该选项的设置时,脚本将作为访问该脚本的用户的标识运行,这并不奇怪。因此,使用您当前的设置,用户需要登录到Google帐户才能成功执行该应用程序User accessing the web appExecute the app as

如果将该选项切换为 ,则会使该选项具有附加选项 , 可用。这是启用对应用程序的真正匿名访问的唯一方法。Execute the app asMe (<you address>)Anyone, even anonymousWho has access to this app

有关更多详细信息,请参阅权限文档


查看完整回答
反对 回复 2022-08-05
  • 2 回答
  • 0 关注
  • 114 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信