【发布时间】:2022-01-03 14:47:47
【问题描述】:
我正在尝试使用 PHP curl 更新我的集合中的条目,但每次都收到 404 错误。
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, APP_URL . '/api/collections/save/trigocms?token=' . APP_TOKEN);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HEADER, ['Content-Type' => 'application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['data' => $site]));
$output = curl_exec($ch);
curl_close($ch);
$site 是一个具有这种结构的关联数组:
[
"_id" => "<identifier>"
"active" => true
"address" => "<some-value>"
"key" => "<some-value>"
]
整个条目还有几个字段,但我只想更新这 3 个。
添加整个条目(填充每个字段)也不起作用。PUT 和 PATCH 方法返回相同的错误。
更新
经过一些调试,我发现在save方法中的/modules/Collections/Controller/RestApi.php中,$this->module('cockpit)->getUser();返回false和$this->param('data', null);返回null,原因不明。
最令人费解的是$this->param('data', null);返回null。
当我转储整个请求对象时,我看到有我的 json 但未解析。只是平面json字符串。
【问题讨论】:
-
检查 CURLOPT_URL、APP_URL 是否在范围内并测试回显完整 URL 并查看您的连接是否有效。如果您可以在浏览器中复制粘贴并查看是否返回 404。
-
@OliverMGrech
APP_URL和APP_TOKEN常量在全局范围内声明,并可在此脚本中访问。我怀疑相同的原因,但我发现两者都是有效的,并且连接的 url 也是有效的。粘贴到浏览器后出现404错误。 -
在我看来,您的 URL 有误,或者是谁提供了您的端点给了您错误的 URL。您无法在 CURL 脚本中解决此问题。检查服务器端的东西(或负责人)
-
好吧。我是。 cockpit 正在我本地网络中的 pc 上运行。假设它的主机名是
random-pc。然后我的网址是http://random-pc/api/collections/save/trigocms?token=<insert_token>,我确定这是正确的网址,因为http://random-pc/api/collection/get/trigocms?token=<insert_token>返回条目列表。 -
您使用的是 IP 地址还是电脑名称/主机名?您的 PHP 脚本正在 Linux 服务器或本地 WAMP 服务器或类似服务器上运行?
标签: php cockpit-cms