如何在 PHP 中使用 cURL 发布到 Google 脚本并返回文本?

2023-12-05

我正在努力做最少的事情,只是为了让它发挥作用。

这是我的谷歌脚本:

function doPost(e) {
  return ContentService.createTextOutput(JSON.stringify(e.parameter));
}

这是我的 PHP 代码:

$url = 'https://script.google.com/a/somedomain.com/macros/s/### script id ###/exec';
$data['name'] = "Joe";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
$error  = curl_error($ch);

执行这个,$result is true.

如果我取消注释CURLOPT_RETURNTRANSFER line, $result =

<HTML>
<HEAD>
<TITLE>Bad Request</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
<H1>Bad Request</H1>
<H2>Error 400</H2>
</BODY>
</HTML>

$error总是空的。

我会用doGet()但我需要发送一些相当大的 POST,这将超出 GET 可以处理的范围。

如何发布到 Google 脚本并返回数据?

- - - 更新 - - -

我刚刚了解到我的首席开发人员前一段时间尝试过此操作,并在返回时得出了 doPost() 错误的结论,所以显然这不仅仅是我。我的看法是,谷歌根本不够可靠,无法使用。我希望有人能证明我错了。

------ 更新 2 - 修复 ---------

显然这是问题所在:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));

需要是:

curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

不知道为什么http_build_query()导致它出错。


尝试阅读文档对于 CURLOPT_POSTFIELDS 你会看到上面写着要发布文件,请在文件名前面添加 @ 并使用完整路径。这看起来就是你想要做的事情。请注意,在 php 5.5 中,CURLFile引入类是为了让您发布文件。

如果您使用 php 5.5 或更高版本,您可以尝试以下操作:

$url = 'https://script.google.com/a/somedomain.com/macros/s/### script id ###/exec';

// create a CURLFile object:
$cfile = new CURLFile('file.pdf','application/pdf'); // you can also optionally use a third parameter

// your POST data...you may need to add other data here like api keys and stuff
$data = array("fileName" => $cfile);

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data"));
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);

// FROM THE DOCS:
// If value is an array, the Content-Type header will be set to multipart/form-data (so you might skip the line above)
// As of PHP 5.2.0, value must be an array if files are passed to this option with the @ prefix
// As of PHP 5.5.0, the @ prefix is deprecated and files can be sent using CURLFile
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

// set this to TRUE if you want curl_exec to retrieve the result
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec($ch);
if ($result === FALSE) {
    echo "The result is FALSE. There was a problem\n";
    $error  = curl_error($ch);
    var_dump($error);
    die();
} else {
    echo "success!\n";
    var_dump($result);
}

// this can give you more information about your request
$info = curl_getinfo($ch);
if ($info === FALSE) {
    echo "curlinfo is FALSE! Something weird happened";
}
var_dump($info); // examine this output for clues

EDIT:如果您没有收到任何错误,并且 $result 返回类似“错误的请求” 那么您需要更仔细地检查结果以找出问题所在。行为良好的 API 应该提供丰富的信息来帮助您解决问题。如果 API 没有告诉您做错了什么,您可以检查从这些命令获得的curlinfo:

$info = curl_getinfo($ch);
var_dump($info); // examine this output for clues

如果 $result 和 $info 没有告诉您做错了什么,请尝试更仔细地阅读 API 文档。你可能会在某处找到线索。

如果您无法使用这些策略找出问题所在,则您的代码无能为力。您需要从 API 维护者那里获得更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 PHP 中使用 cURL 发布到 Google 脚本并返回文本? 的相关文章

  • 在 PHP 中强制以标准数学符号输出[重复]

    这个问题在这里已经有答案了 当我执行以下操作时echo 456 100000000我以科学记数法得到输出 4 56E 6 是否可以强制以标准符号输出 即0 00000456 看看这个函数 http php net manual en fun
  • 多单元元素的 FPDF 高度

    我使用 FPDF 库将一些文档文件导出为 PDF 一个文档包含一系列具有不同长度的字符串 我将所有字符串打印为 pdf gt MultiCell 现在 我希望该 MultiCell 的当前高度具有相同的行间距 以防它们只有一行或多行 代码示
  • MVC:如何使用ajax?

    我将使用 Zend Framework MVC 实现启动一个项目 我如何使用ajax 我的意思是 我应该将所有 ajax 代码放入控制器中吗 还是进入视野 例如 我想将作者 ivan 的帖子显示在页面上 通常 我创建一个指向 posts a
  • 如何使用 aws-cli 访问 Google Cloud Storage 存储桶

    我可以访问 aws 和 Google Cloud Platform 是否可以执行以下操作 使用 aws cli 列出 Google Cloud Storage 存储桶 使用 aws cli 将 CSV 文件放入 Google Cloud S
  • 重置密码 电子邮件

    我是 Laravel 开发新手 目前正在从事小型项目 我想自定义重置密码的电子邮件模板 甚至将其链接到完全不同的模板 对于身份验证脚手架 我使用了php artisan make auth命令 但是 默认重置密码功能使用默认的 Larave
  • 如何在变量中存储包含哈希标记的完整 url?

    我正在尝试存储一个网址 例如 http localhost pro print index php page home http localhost pro print index php page home 在变量中 但我找不到执行此操作
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 强制 nginx 立即关闭连接

    如何让nginx在请求完成后立即关闭tcp连接 我刚刚找到了解决方案 location ip keepalive timeout 0
  • PHP:将字符串分成 8 个块,我该怎么做?

    我基本上有二进制 假设它的长度是300 我如何将它分割 就像使用爆炸一样 成 8 位块 我查看了 chunk split 但它似乎只有一个 end 参数 而不是将其放入数组的选项 或者它可以插入数组吗 末尾 8 位数字可以低于 8 如果有人
  • PHP 选择后立即删除

    我有一个 PHP 服务器脚本 它从 MySQL 数据库中选择一些数据 一旦我将 mysql query 和 mysql fetch assoc 的结果存储在我自己的局部变量中 我就想删除我刚刚选择的行 这种方法的问题在于 PHP 似乎对我的
  • php simpleXMLElement 到数组:空值

    我有以下 XML
  • 将记录分成两列

    我的数据库中有一个 学生 表 其中包含大约 5 000 条记录 我想将这些记录显示在two分区 如何在不执行查询两次的情况下做到这一点 仅使用单个查询 显示示例http www freeimagehosting net uploads f1
  • Zend 框架将字母“f”输出到我的页面上

    我已经下载了 Zend 框架稳定版本 我相信是 1 11 上传到我的服务器 并将其添加到我的 php 包含路径中 我的目标是使用 Feed 和 Feed Writer 模块来处理一些 RSS 和 Atom 的繁重工作 问题是 每当我包含 F
  • 为什么我的函数将布尔值更改为“on”?

    所以我是 php 编程世界的新手 我正在在线学习和其他形式等 但我找不到任何东西来帮助回答我的问题 这就是我在这里的原因 任何帮助当然不胜感激 谢谢 我想将下面的代码变成我可以调用的函数 它的工作原理如下所示 如果我选中表单中的复选框 它会
  • Codeigniter:重置表单值

    在我看来 我想要做的是在用户成功注册后清除表单字段 这里一切正常 即用户正在注册 成功消息正在向用户显示 除了我想要做的是清除表单字段的值 我正在使用这个 Clear the form validation field data so th
  • 从 XML 节点 PHP DOM 中删除所有子节点

    我想使用 PHP DOM 从 XML 节点中删除所有子节点 以下之间有什么区别 A while parentNode gt hasChildNodes parentNode gt removeChild parentNode gt chil
  • 如何在 apache 上为锚点 cms 重写指令

    我使用的是一个名为anchor的cms http anchorcms com docs getting started configuration http anchorcms com docs getting started config
  • Laravel 作业推送至 Amazon SQS 但未处理

    我正在运行 Laravel 5 3 我正在尝试测试队列作业 并且我已将队列配置为使用 Amazon SQS 我的应用程序能够将作业推送到队列中 并且我可以在 SQS 中看到该作业 但它留在那里 从未被处理 我尝试过跑步php artisan
  • 按通用值对值进行分组:userid 和 ipaddress

    我正在解决数据库中的一个问题 我正在尝试查找使用多个帐户的用户 我有一个用户 ID 和使用的 IP 地址的列表 如下所示 用户 ID IP 地址 1 IP 地址 13 2 IP 地址 23 1 IP 地址 12 4 IP地址56 9 IP
  • 使用 php 获取当前月份的最后 3 个月

    我想获取当前月份最近 3 个月的名称 例如当前月份是八月 所以 我想要六月 七月 八月这样的数据 我已经尝试过这段代码echo date F strtotime 3 months 它只返回六月 如何使用 php 获取当前月份的最后 3 个月

随机推荐