кокпит «api/коллекции/сохранение» 404 ошибка PHP curl

#php #cockpit-cms

Вопрос:

Я пытаюсь обновить записи в своей коллекции с помощью 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' =gt; 'application/json']); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['data' =gt; $site])); $output = curl_exec($ch); curl_close($ch);  

$site является ассоциативным массивом с этой структурой:

 [  "_id" =gt; "lt;identifiergt;"  "active" =gt; true  "address" =gt; "lt;some-valuegt;"  "key" =gt; "lt;some-valuegt;" ]  

вся запись содержит еще несколько полей, но я хочу обновить только эти 3.
Добавление всей записи (с заполнением каждого поля) также не работает.
PUT и PATCH методы возвращают ту же ошибку.

Обновить
После некоторой отладки я обнаружил /modules/Collections/Controller/RestApi.php , что в save методе $this-gt;module('cockpit)-gt;getUser(); in возвращается false и $this-gt;param('data', null); возвращается null по какой-то неизвестной причине.

Самое загадочное, что $this-gt;param('data', null); возвращается null . когда я сбросил весь объект запроса, я вижу, что есть мой json, но он не проанализирован. просто плоская строка json. фрагмент объекта запроса

Комментарии:

1. Проверьте, что CURLOPT_URL, APP_URL находятся в области действия, и проверьте полный URL-адрес, чтобы убедиться, что ваша конкатенация действительна. Если вы можете скопировать вставку в браузере и посмотреть, возвращается ли 404 как wel.

2. @OliverMGrech APP_URL и APP_TOKEN константы объявлены в глобальной области и доступны в этом сценарии. Я подозревал ту же причину, но оказалось, что оба они действительны, и объединенный URL-адрес также действителен. После вставки его в браузер появляется ошибка 404.

3. мне кажется, что у вас неправильный URL-адрес или кто предоставил вашу конечную точку, дал вам неправильный URL-адрес. Вы не можете исправить это в своем сценарии CURL. Проверьте информацию на стороне сервера (или того, кто несет ответственность)

4. хорошо. Я. cockpit работает на ПК в моей локальной сети. Допустим, его имя хоста таково random-pc . Тогда мой URL http://random-pc/api/collections/save/trigocms?token=lt;insert_tokengt; -адрес, и я уверен, что это правильный URL-адрес, потому http://random-pc/api/collection/get/trigocms?token=lt;insert_tokengt; что возвращает список записей.

5. вы используете IP-адрес или имя компьютера / имя хоста? ваш PHP-скрипт работает на сервере Linux или на локальном сервере WAMP или аналогичном?

Ответ №1:

После некоторой обширной отладки я нашел решение.

Моя ошибка была в завитке. Более конкретно в том, как я пытался установить заголовки (глупый я).

Мне пришлось переодеться:

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

Для:

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