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

我试图弄清楚为什么这段代码不适用于Google Apps脚本网络应用网址,但它可以与随机的网络API网址一起使用?

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

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

Google Apps 脚本代码位于第三个代码块的下方。

有什么想法吗?

多亏了塔奈克,问题解决了!!粘贴在问题底部的工作代码。

http://img4.mukewang.com/62eccb4c0001af7c04740501.jpg

第一个代码块


<?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);

}

工作代码,谢谢田奈克!!


<?php

// Initiate curl session in a variable (resource)

$curl_handle = curl_init();


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



交互式爱情
浏览 115回答 2
2回答

慕尼黑8549860

您希望使用 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,&nbsp;CURLOPT_FOLLOWLOCATION,&nbsp;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 应用。请小心这一点。

尚方宝剑之说

我尝试在隐身窗口中访问应用程序脚本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有关更多详细信息,请参阅权限文档。
打开App,查看更多内容
随时随地看视频慕课网APP