【问题标题】:cockpit "api/collections/save" 404 error PHP curl驾驶舱“api/collections/save”404 错误 PHP curl
【发布时间】: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 个。
添加整个条目(填充每个字段)也不起作用。
PUTPATCH 方法返回相同的错误。

更新
经过一些调试,我发现在save方法中的/modules/Collections/Controller/RestApi.php中,$this-&gt;module('cockpit)-&gt;getUser();返回false$this-&gt;param('data', null);返回null,原因不明。

最令人费解的是$this-&gt;param('data', null);返回null。 当我转储整个请求对象时,我看到有我的 json 但未解析。只是平面json字符串。

【问题讨论】:

  • 检查 CURLOPT_URL、APP_URL 是否在范围内并测试回显完整 URL 并查看您的连接是否有效。如果您可以在浏览器中复制粘贴并查看是否返回 404。
  • @OliverMGrech APP_URLAPP_TOKEN 常量在全局范围内声明,并可在此脚本中访问。我怀疑相同的原因,但我发现两者都是有效的,并且连接的 url 也是有效的。粘贴到浏览器后出现404错误。
  • 在我看来,您的 URL 有误,或者是谁提供了您的端点给了您错误的 URL。您无法在 CURL 脚本中解决此问题。检查服务器端的东西(或负责人)
  • 好吧。我是。 cockpit 正在我本地网络中的 pc 上运行。假设它的主机名是random-pc。然后我的网址是http://random-pc/api/collections/save/trigocms?token=&lt;insert_token&gt;,我确定这是正确的网址,因为http://random-pc/api/collection/get/trigocms?token=&lt;insert_token&gt; 返回条目列表。
  • 您使用的是 IP 地址还是电脑名称/主机名?您的 PHP 脚本正在 Linux 服务器或本地 WAMP 服务器或类似服务器上运行?

标签: php cockpit-cms


【解决方案1】:

经过大量调试,我找到了解决方案。

我的错误在于 curl。更具体地说,是我尝试设置标题的方式(我很傻)。

我不得不改变:

curl_setopt($ch, CURLOPT_HEADER, ['Content-Type' => 'application/json']);

到:

curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2022-07-01
    相关资源
    最近更新 更多